Linux进程管理简述
一、进程概述
程序是程序员按照一定的语言规范和编程逻辑写出的代码和数据的集合,是一个资源单位;进程是一个程序在一个数据集上的一次执行,是系统进行资源分配和调度的基本单位。有很多人混淆他们的概念,其实他们是很好区分的,程序是数据和指令的集合,是一个静态的概念,而进程是程序运行的过程,是一个动态的概念。
二、进程分类
在Linux中进程一般分为四种:父进程、子进程、孤儿进程、僵尸进程。
1️⃣ 父进程:指已创建一个或多个子进程的进程。在Linux里,除了进程0以外的所有进程都是由其他进程使用系统调用fork()函数创建的,这里调用fork()函数创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。
2️⃣ 子进程:指的是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分属性,如文件描述符。在Unix中,子进程通常为系统调用fork()函数的产物。在此情况下,子进程一开始就是父进程的副本,而在这之后,根据具体需要,子进程可以借助exec调用来链式加载另一程序。
3️⃣ 孤儿进程:孤儿进程是没有危害的,孤儿进程是指没有父进程的子进程,当孤儿进程没有父进程时,内核就会把init设置为孤儿进程的父进程,init进程就会调用wait去释放那些已经退出的子进程,当孤儿进程完成其生命周期之后,init会释放掉其状态信息。
4️⃣ 僵尸进程:每一个进程使用 fork 创建子进程,如果子进程退出而父进程并没有调用 wait()或者waitpid(),即父进程不知道子进程的状态信息,那么子进程的描述符将仍然保存在系统中。这种进程就被称为僵尸进程 。
三、查看进程
查看进程的方式有很多种,静态的查看方式比如 ps
命令,动态的我们可以使用Linux的 “资源管理器“ 查看,使用命令 top
即可实时查看进程的使用情况。
ps auxf
是Unix风格的命令、ps -ef
是Linux风格的命令,两种方式区别并不是很大;
top命令动态结果显示如下(截取部分展示):
我们需要重点关注的是PID、USER、%CPU、%MEM、COMMAND,其他的我们在实际工作中用的并不多(很少或几乎用不到)了解即可。
标志 | 意义 |
---|---|
USER | 该 process 属于那个使用者账号的 |
PID | 该 process 的号码 |
%CPU | 该 process 使用掉的 CPU 资源百分比 |
%MEM | 该 process 所占用的物理内存百分比 |
VSZ | 该 process 使用掉的虚拟内存量 (Kbytes) |
RSS | 该 process 占用的固定的内存量 (Kbytes) |
TTY | 该 process 是在那个终端上面运行,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 |
STAT | 该程序目前的状态 |
START | 该 process 被触发启动的时间 |
TIME | 该 process 实际使用 CPU 运作的时间 |
COMMAND | 该程序的实际指令[]内核态进程 无[] 用户进程 |
STAT 基本状态 |
描述 | STAT 状态+符号 |
描述 |
---|---|---|---|
R | 进程运行 | s | 进程是控制进程, Ss进程的领导者,父进程 |
S | 可中断睡眠 | < | 进程运行在高优先级上,S<优先级较高的进程 |
T | 进程被暂停 | N | 进程运行在低优先级上,SN优先级较低的进程 |
D | 不可中断睡眠 | + | 当前进程运行在前台,R+该表示进程在前台运行 |
Z | 僵尸进程 | l | 进程是多线程的,Sl表示进程是以线程方式运行 |
查看进程的方法有很多中,大家根据个人习惯选择即可,我比较喜欢htop这个工具,安利一下,其他的工具大家可以自行探索……
四、管理进程
如果我们不希望某个进程继续运行,怎么办呢?我们可以给系统发送信号,告诉它某个进程我们不需要了,不用继续进行了,系统就会直接结束这个进程。系统识别的信号都有哪些呢?我们可以一起来看一下。
看到这么多信号是不是有些眼花缭乱,哈哈哈哈,我也是,我们只需要谨记的只有三个信号 1、 9、15 。15是我们的默认信号也称终止信号,9是强制终止信号也称杀死信号。1是重新加载信号。除此 kill
命令之外我们还有,pkill
命令和killall
命令,但是这两个命令过于危险,他们可以直接杀死服务或系统下的所有进程,我们今天不做详细解释。
案例:我们使用ping命令访问外网并把它放入后台运行,然后使用kill命令终止这个进程。
丹墀对策三千字,金榜题名五色春。
——元•王冕《送王克敏之安丰录事》