直接杀死父进程
//进入守护进程
int switchDaemon();
int main()
{
switchDaemon();
fork();
fork();
while (1);
return 0;
}
int switchDaemon() {
pid_t ret = fork();
if (ret == -1) { return -1; }
if (ret > 0) { exit(0); }
ret = setsid();
if (ret == -1) { return -2; }
ret = fork();
if (ret == -1) { return -3; }
if (ret > 0) { exit(0); }
umask(0);
signal(SIGCHLD, SIG_IGN);
}
代码含义,在守护进程中。创建子进程,随后杀死守护进程。
实验结果,子进程不会被杀死,成为了孤儿进程,被Init进程托管。
子进程设置监听父进程死亡
prctl(PR_SET_PDEATHSIG, SIGHUP);
prctl()操纵调用线程或进程行为的各个方面。
PR_SET_PDEATHSIG
这是当父进程死亡时,调用进程将得到的信号。特别注意,这里的父进程指代创建该子进程的进程。
SIGHUP
挂断,相当于杀死自己。
int main()
{
switchDaemon();
fork();
fork();
prctl(PR_SET_PDEATHSIG, SIGHUP);
while (1);
return 0;
}
实验结果,父进程被杀死后,子进程和子进程的子进程各自杀死。
孤儿进程
孤儿进程简单来说,是父进程因运行完毕、kill、奔溃后死亡,但是子进程仍然没有运行完毕的进程。会被init进程托管。
原文链接: https://www.cnblogs.com/tofu-ran/p/17133585.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/319048
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!