前几天被问了一个僵死进程的问题,自己更多时候并发会选择线程,对进程的问题竟然文盲到如此程度,惭愧惭愧。
僵死进程是说子进程退出了并没有父进程来回收它的资源,这样的进程就是僵死进程。linux是这样当一个进程由于某种原因终止后,内核并不立刻把它从系统中清除,而是把任务交给其父进程,如果父进程退出了则交给1号进程。
自己写了一个测试程序,系统不停开出子进程,子进程不做任何事情就退出,程序很快报出Resource temporarily unavailable的错误,因为子进程没做任何事就退出了,所以不会是因为操作系统内进程过多而导致错误,这个错误可以认为是僵死进程造成的。
测试代码:
如果把注释去掉,让父进程回收结束了的子进程资源,那么不会报错。
ps:在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程。按系统默认将忽略此信号。如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。信号的捕捉函数中通常调用wait函数以取得进程ID和其终止状态。