Linux下的孤儿进程、僵尸进程的形成过程

linux中,关于进程的命令ps:

功能: Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。

(1)ps -f:显示进程的UID,PID PPID等栏位(只有当前命令触发的进程)

(2)ps -e:显示系统内所有进程

(3)ps -ef:显示系统内所有进程,并且有对应的栏位

(4)ps -ef | head -n1:查看显示系统所有文件的第一行是什么

(5)ps -ef | grep a.out:在系统所有进程中过滤出a.out(可执行程序)进程

(6)ps -ef | grep a.out | gerp -v grep:在系统所有进程中过滤出a.out进程,并且去掉grep的进程。

案例1

使用2个终端,一个终端运行一个程序(子进程死循环,父进程已退出,这时子进程是孤儿进程,被1号进程收养),另一个终端查看其进程情况。

Linux下的孤儿进程、僵尸进程的形成过程

1)执行命令:ps -ef | head -n1 (查看系统所有进程的第一行是什么)

执行结果:

Linux下的孤儿进程、僵尸进程的形成过程

以上结果说明UID为进程拥有者,PID为进程标识符,PPID为父进程标识符。

(2)执行命令:ps -ef | grep a.out | grep -v grep (在系统所有进程中,过滤出a.out进程,并且去掉grep的进程)

执行结果:

Linux下的孤儿进程、僵尸进程的形成过程

以上结果说明,在终端一进行的进程的拥有者是root ,进程标识符为21471,其父进程的标识符为1(这是因为子进程进入死循环,父进程已退出,子进程被1号进程收养)

需要注意的是,所有的进程,以进程编号在/proc/进程编号 都是一个目录,此目录下有关于此进程的有关信息。比如:

Linux下的孤儿进程、僵尸进程的形成过程

其中attr是存放进程属性信息,maps存放内存映射等。

另外,当终端一进入死循环时,在终端二上结束这个死循环进程:

Killall 进程编号(进程标识符)

案例:2

使用2个终端,一个终端运行一个程序(父进程死循环,子进程已退出,子进程成为僵尸进程,僵尸进程存在有危害,用简单的kill命令杀不死,必须先杀死它的父进程,这个僵尸进程才会彻底终止),另一个终端查看其进程情况。

Linux下的孤儿进程、僵尸进程的形成过程

(1)执行命令 ps -ef | grep a.out | grep -v grep

 执行结果:

Linux下的孤儿进程、僵尸进程的形成过程

以上结果说明,当父进程进入死循环,子进程退出之后变成僵尸进程。

(1)执行命令 kill 22197(杀死僵尸进程)

以上操作是无法达到预期效果的,kill 22196(杀死僵尸进程的父进程)才会彻底终止僵尸进程。