Linux系统编程:step1( 三 )


②不是活着的进程
z:表示僵尸的意思,表示a.out进程为僵尸进程 。
如何杀死僵尸进程呢?通过杀死他爹的进程就行了,也就是3516,直接杀死僵尸进程是不能消除的,相当于鞭尸 。
(3)进程回收
①wait-阻塞函数(与差不多,也就是一直阻塞在哪,等待消息)
pid_t wait(int * );
作用:因为子进程需要父进程进行回收,而且在并发运行的时候,父子进程的执行顺序是不一定的,所以需要wait函数去使得父进程等待子进程结束,然后回收,最后父进程结束,造成有顺序的执行 。
如上died child pid是最后执行的,表明父进程是在子进程执行完,回收它之后执行完的 。

这里最后的返回值为9,表明父进程一直执行到最后,所以返回了9,也就是 正常退出
当子进程一直循环不退出时,父进程将一直等待:
有两个进程在运行,kill -9 4051。通过信号杀死子进程,预期不会返回12,会返回9
终止了 。
小结:
父进程结束的比子进程早,则会造成子进程成为孤儿进程;
父进程结束的比子进程晚,并且父进程一直不退出,则会造成子进程成为僵尸进程;(所以消灭僵尸进程是通过kill父进程达到目的)
解决方法:通过父进程中调用wait函数 。