gpt4 book ai didi

c - fork 后强制子进程退出

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:47 25 4
gpt4 key购买 nike

我正在尝试创建一个实际 fork 子进程的应用程序。问题是在所有 fork 完成后,我不需要退出应用程序来关闭所有子进程。

我正在使用以下代码:

for(i=0;i<tot;i++) {
switch(PID = fork()) {
case -1:
perror("[!] Couldn't fork!\n");
exit(1);
case 0:
//do something
exit(0);
default:
numforks++;
if (numforks > THREADS)
for (numforks; numforks > THREADS; numforks--)
PID = wait(&status);
}
}

while ((PID = wait(&status)) > 0);

问题是等待 PID 在上面的 while 中完成,需要更长的时间,因为有时很少有 child 只是挂起。例如,我如何实现能够在 3 秒后真正杀死子进程的东西?

我知道 kill 命令,但我无法找到一种方法来解析所有 fork 子进程并向它们发送 SIGTERM 信号。

经过一番研究,我想到了这个解决方案:

int mypid;
mypid = getpid();
do {
pid = waitpid(-1, NULL, WNOHANG);
if ( errno == ECHILD ) break;
if (pid != mypid)
kill(pid, SIGKILL);
} while ( pid > 0 );

但问题在于,它并不仅仅杀死生成的 fork 。它也杀死了父进程。有什么想法吗?

最佳答案

您可以使用 kill() 和定时器在指定的时间间隔后发送它。

int kill(pid_t pid, int sig);

例如:kill(0,SIGTERM);

如果 pid 等于 0,则 sig 被发送到调用进程的进程组中的每个进程,因为当进程被派生时,它会从其父进程继承其 PGID。

关于c - fork 后强制子进程退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27453269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com