谁来解释一下“孤儿进程组”这个概念有什么用
父进程要么在自己组里,要么不在同一个会话,就是孤儿进程组
概念是懂了,但是为什么要有这样一个概念?为什么服务的?
[解决办法]
就是当进程组的控制进程/父进程被终止以后,这个进程组就变成孤儿。
当一个进程组变成一个孤儿,会向其进程都发送一个SIGHUP信号。
一般来说,这会导致进程终止。
然而,如果一个程序将忽略此信号,它就进入了孤儿进程组,独立于控制进程运行,但它仍然无法访问终端。
[解决办法]
在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。