强制子进程在派生后退出

问题描述 投票:1回答:2

我正在尝试创建一个实际上可以分叉子进程的应用。问题是在完成所有分叉之后,我不需要退出应用程序即可关闭所有子进程。

我正在使用以下代码:

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在上述过程中花费的时间较长,有时孩子很少会挂起。例如,如何实现可以在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 );

但是问题是,不仅杀死了产生的叉子。它也会杀死父进程。有什么想法吗?

我正在尝试创建一个实际上可以分叉子进程的应用。问题是在完成所有分叉之后,我不需要退出应用程序即可关闭所有子进程。我正在使用以下代码:...

c linux
2个回答
2
投票

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


0
投票

埃斯蒂罗马?达卡达(Daca da),拉萨米(Lasa-mi)电子邮件,vreau savorbim ceva。

© www.soinside.com 2019 - 2024. All rights reserved.