僵尸进程的产生,危害,避免,及其模拟实现僵尸进程。
僵尸进程
当子进程退出,并且父进程没有读取到子进程的返回状态码,就会产生僵尸进程。
僵尸进程的产生原因
a. 子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它
b. 父进程没有调用wait()或waitpid()函数来等待子进程的结束
c. 网络原因有时会引起僵尸进程;
僵尸进程的危害
僵尸状态(Z)不退出则需要一种用数据维护(属于进程的基本信息).
父进程创建多个子进程不回收会造成内存资源的浪费。
僵尸进程的避免
(1) 让僵尸进程成为孤儿进程,由init进程回收;(手动杀死父进程)
(2) 调用fork()两次;
(3) 捕捉SIGCHLD信号,并在信号处理函数中调用wait函数;
模拟实现僵尸进程
1 //jiangshi jincheng
2 #include<stdio.h>
3