我有一种情况,其中一个父进程可能会生成许多子进程。
我想要实现的是,如果父进程被杀死或退出,则所有子进程应该随着父进程一起终止。
在下面的帖子中(链接如下),我发现了通过使父进程成为组长来实现这一点的建议。 如果我理解正确,这也是进程组的主要目的。我对吗? 帖子还提到了prctl(PR_SET_PDEATHSIG,SIGHUP);和其他一些方法,但它们都是特定于操作系统的,或者以其他方式不太优雅。
我编写了一个小型演示程序,试图更好地理解事情,但它并没有按照我预期的方式工作。我做错了什么?
在下面的帖子中(链接如下),我发现了通过使父进程成为组长来实现这一点的建议。 如果我理解正确,这也是进程组的主要目的。我对吗? 帖子还提到了prctl(PR_SET_PDEATHSIG,SIGHUP);和其他一些方法,但它们都是特定于操作系统的,或者以其他方式不太优雅。
我编写了一个小型演示程序,试图更好地理解事情,但它并没有按照我预期的方式工作。我做错了什么?
//https://www.andrew.cmu.edu/course/15-310/applications/homework/homework4/terminalgroups1.html
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <stddef.h>
#include <errno.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <sys/termios.h>
int main()
{
int status;
int cpid;
int ppid;
ppid = getpid();
printf("parent: %d\n", ppid);
if (!(cpid=fork()))
{
printf("child: %d\n", getpid());
if(setpgid(0,ppid) == -1)
printf("child setpgid errno %s\n", strerror(errno));
else
printf("child gid %d\n", getpgid(0));
pause();
printf("child exited\n");
exit (-1);
}
if (cpid < 0)
exit(-1);
setpgid(0, ppid);
if(setpgid(0,0) == -1)
printf("parent setpgid erno %s\n", strerror(errno));
else
printf("parrent gid %d\n", getpgid(0));
sleep(7);
printf("parent exit\n");
exit(0);
}
这篇文章与以下建议有关: * 如何使子进程在父进程退出后自动终止?