Linux / 僵尸进程、孤儿进程 产生原因、有什么危害、如何预防(解决方案)
#include
#include
#include
#include
#include
#include void signalproc(int isig)
{int istatus;waitpid(SIG_BLOCK, &istatus, WNOHANG);
}int main()
{signal(SIGCHLD, signalproc);pid_t pid;int r = fork();if (r < 0)std::cout << "创建进程失败!" << std::endl;else if (r == 0){std::cout << "子进程开始运行!" << std::endl;int r1 = fork();if (r < 0)std::cout << "创建孙进程失败!" << std::endl;else if (r1 == 0){std::cout << "孙进程开始运行,并进入循环!" << std::endl;while (true){std::cout << "Sun" << std::endl;sleep(1);}}std::cout << "子进程退出" << std::endl;exit(0);}std::cout << "父进程开始进入循环!" << std::endl;while (true){std::cout << "parent" << std::endl;sleep(1);}return 0;
}
结果:
ps -eo pid,ppid,sid,comm,stat | grep -E 'bash|fork'
结果:
13997 2539 13997 bash Ss
15816 2539 15816 bash Ss
15939 15816 15816 forktest S+
15941 1210 15816 forktest S+
注意:
由于我的系统是 ubuntu 18.04,所以 forktest 的孙进程的父进程是 1210,不是 init 。1210 进程是 systemd 进程,该进程的具体含义后续有时间会说明
(SAW:Game Over!)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
