第五章 进程管理
5.1 初识进程
进程是已启动的可执行程序的运行实例。进程有以下组成部分。
1.已分配内存的地址空间。
2.安全属性,包括所有权凭据和特权。
3.程序代码的一个或多个执行线程。
4.进程状态
每个进程都有唯一的进程标识PID,一个PID只能标识一个进程,PPID为父进程ID,需要给该进程分配系统资源。
进程状态是指程序执行过程中的变化。进程状态随着程序的执行和外界条件的变化而转换,一般分为3类:就绪态、运行态、阻塞态。
5.2 查看进程
5.2.1 静态查看进程
PS命令可以查看静态进程,仅仅是捕捉某一个瞬间某一个进程的状态,类似于给进程制作快照。使用“ps-aux”命令查看当前目录的进程。
用户在查看CUP占用率时,一般会希望进程按照CPU占用百分比的降序排列,此时可以使用“ps aux--sort-%cpu”命令。“ps -ef”命令可以查看UID、PID、PPID等信息;一般情况下,并不是所有显示的内容都有意义,为了快速查找,需要显示的内容简洁并有针对性,用户可以使用“ps axo”命令自定义显示的字段。
5.2.2 动态查看进程
top命令可以实时动态的显示进程,类似于Windows系统中的任务管理器。使用top命令动态查看进程时,进程信息分为上下两个部分,上面为整体信息,下面为每一个进程的信息。在下半部分,按M键以内存占用率排序:按P键以CPU占用率排序:按N键以PID数值大小排序:按R键对排序进行反转:按F键显示自定义显示字段:按上下键移动。按空格键选中。按q键退出自定义显示字段。按w键保存自定义显示字段。按I键显示所有CPU的负载。
5.3 信号控制进程
在进程运行过程中,若由于某些原因需要终止该进程,用户可以给予该进程一个信号,进程接收到信号之后,就会依照信号的要求做出相应的反应。
5.3.1 Kill命令
Linux中的Kill命令用来终止指定进程的运行。首先使用ps/pidof/top等工具获取进程PID,然后使用Kill命令来杀死该进程。Kill命令通过向进程发送指定的信号来结束相应的进程,在默认情况下,采用编号为15的TERM信号。使用“Kill-l”命令来查看全部信号。
5.3.2 killall命令
killall命令可以用来终止某个指定名称的服务所对应的全部进程。
5.4 进程优先级
进程的优先级是一个数值,动态的优先级和静态的优先级决定了进程被CPU处理的顺序。一个拥有更高进程优先级的进程被CPU处理的概率更高。
5.4.1 使用top命令查看nice级别
5.4.2 使用PS命令查看nice级别
5.5 作业控制
作业控制是一个命令行功能,允许一个Shell实例运行和管理多个命令。如果没有作业控制,父进程fork()一个子进程后将休眠,直到子进程退出。使用作业控制可以选择性暂停、恢复以及异步运行命令。让Shell可以在子进程运行期间返回接受其他命令。jobs命令用于显示当前Shell中的作业列表及作业状态,包括后台运行的任务;使用bg命令可以把任务移动至后台;使用fg命令可以将进程移动到前台。
5.6 本章小结
本章首先讲解了进程的概念、进程的状态,以及如何使用PS与top命令查看该进程;接着讲解了用户可以通过给予进程信号的方式对进程进行控制;最后讲解了作业控制的基本原理。