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号进程收养),另一个终端查看其进程情况。
(1)执行命令:ps -ef | head -n1 (查看系统所有进程的第一行是什么)
执行结果:
以上结果说明UID为进程拥有者,PID为进程标识符,PPID为父进程标识符。
(2)执行命令:ps -ef | grep a.out | grep -v grep (在系统所有进程中,过滤出a.out进程,并且去掉grep的进程)
执行结果:
以上结果说明,在终端一进行的进程的拥有者是root ,进程标识符为21471,其父进程的标识符为1(这是因为子进程进入死循环,父进程已退出,子进程被1号进程收养)
需要注意的是,所有的进程,以进程编号在/proc/进程编号 都是一个目录,此目录下有关于此进程的有关信息。比如:
其中attr是存放进程属性信息,maps存放内存映射等。
另外,当终端一进入死循环时,在终端二上结束这个死循环进程:
Killall 进程编号(进程标识符)
案例:2:
使用2个终端,一个终端运行一个程序(父进程死循环,子进程已退出,子进程成为僵尸进程,僵尸进程存在有危害,用简单的kill命令杀不死,必须先杀死它的父进程,这个僵尸进程才会彻底终止),另一个终端查看其进程情况。
(1)执行命令 ps -ef | grep a.out | grep -v grep
执行结果:
以上结果说明,当父进程进入死循环,子进程退出之后变成僵尸进程。
(1)执行命令 kill 22197(杀死僵尸进程)
以上操作是无法达到预期效果的,kill 22196(杀死僵尸进程的父进程)才会彻底终止僵尸进程。