大家好,小城来为大家解答以上问题。僵死线程,僵死进程很多人还不知道,现在让我们一起来看看吧!
1、为了后续讲解,我们编写一个程序例子。程序中接收用户输入,并创建子进程处理用户输入。
2、程序示例如下:
3、运行程序,再输入数据并获取处理结果之后,我们查看系统中进程,发现产生了僵尸进程。
4、僵尸进程产生的原因是因为子进程已经结束运行,但是父进程没有对其进行回收。
5、第一种方式:父进程创建了子进程之后,等待回收子进程资源。
6、优化程序后,我们再次执行并查看系统中进程,没有僵尸进程了。
7、父进程等待回收子进程资源时,父进程此时并没有充分利用起来,影响系统效率。
8、在子进程结束后,父进程会收到SIGCHLD信号,通过在父进程中设置信号处理函数,收到SIGCHLD信号后再执行回收操作。这样提高系统效率。
9、如果程序中不关心子进程是否结束,那么对于SIGCHLD信号,父进程设置为忽略。那么当子进程退出后,内核会将该进程回收。所以,忽略SIGCHLD信号也是一种处理方法。
10、最后,还有一种处理方法。父进程创建子进程并等待子进程退出,在子进程处理中,创建孙进程,子进程马上结束。
11、这样父进程等待子进程并不需要太久,而孙进程的父进程已经结束,孙进程的父进程将设置为init进程。孙进程结束后,由init系统进程对其进行回收。
本文到此结束,希望对大家有所帮助。