Linux学习(四)
Linux进程
程序与进程、线程
- 程序:程序可以理解为执行一系列有逻辑、有顺序结构的指令,帮我们达成某个结果(静止)
- 进程:进程是程序在一个数据集合上的一次执行过程
- 线程(thread):是操作系统能够进行运算调度的最小单位
关系如下:

进程的特性
- 动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
- 并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
- 独立性:进程可以独立分配资源,独立接受调度,独立地运行。
- 异步性:进程以不可预知的速度向前推进。
- 结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。
进程分类
进程功能与服务划分:
- 用户进程:通过执行用户程序、应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
- 系统进程:通过执行系统内核程序而产生的进程,比如可以执行内存资源分配和进程切换等相对底层的工作;而且该进程的运行不受用户的干预,即使是 root 用户也不能干预系统进程的运行。
应用程序的服务类型划分:
- 交互进程:由一个 shell 终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台
- 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
- 守护进程:守护进程是一直运行的一种进程,在 Linux 系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如 httpd 进程,一直处于运行状态,等待用户的访问。还有经常用的 cron(在 centOS 系列为 crond)进程,这个进程为 crontab 的守护进程,可以周期性的执行用户设定的某些任务。
父进程与子进程:
系统调用 fork() 与 exec(),子进程就是父进程通过系统调用 fork() 而产生的复制品,fork() 就是把父进程的 PCB 等进程的数据结构信息直接复制过来,只是修改了 PID,所以一模一样,只有在执行 exec() 之后才会不同,而早先的 fork() 比较消耗资源后来进化成 vfork(),效率高了不少
进程组与Sessions
- 区分: PGID,等同于进程组的第一个成员的 PID
- 每当一个进程被创建的时候,它便会成为其父进程所在 Session 中的一员,每一个进程组都会在一个 Session 中,并且这个 Session 是唯一存在的
# ctrl + c 终止进程 # ctrl + z 停止当前工作丢到后台 # jobs 查看被停止并放置在后台的工作 #将后台工作拿到前台,后面不加参数提取预设工作,加参数提取指定工作的编号 #ubuntu 在 zsh 中需要 %,在 bash 中不需要 % fg [%jobnumber] #后台运作进程,与fg类似,加参则指定,不加参则取预设 bg [%jobnumber] # 删除工作 kill的使用格式如下 kill -signal %jobnumber #signal从1-64个信号值可以选择,可以这样查看 kill -l

Linux日志系统:
作用: 日志可以用来排错,在一些网络应用服务不能正常工作的时候,我们需要用日志来做问题定位,日志还是过往时间的记录本,我们可以通过它知道我们是否被不明用户登录过等等。
系统日志
- 存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等
应用日志
- 存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等
日志的配置方式
- 一种是由软件开发商自己来自定义日志格式然后指定输出日志位置;
- 一种方式就是 Linux 提供的日志服务程序,如通过 syslog 来实现,提供日志管理服务。
rsyslog
全称是 rocket-fast system for log,提供了高性能高安全功能和模块化设计
数据走向:
架构:
执行顺序: 指令在 rsyslog.conf 文件中是从上到下的顺序执行的。
转储的日志
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件。我们可以根据日志文件的大小,也可以根据其天数来切割日志、管理日志,这个过程又叫做“转储”。