我正在尝试创建一个实际上可以分叉子进程的应用。问题是在完成所有分叉之后,我不需要退出应用程序即可关闭所有子进程。
我正在使用以下代码:
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 );
但是问题是,不仅杀死了产生的叉子。它也会杀死父进程。有什么想法吗?
我正在尝试创建一个实际上可以分叉子进程的应用。问题是在完成所有分叉之后,我不需要退出应用程序即可关闭所有子进程。我正在使用以下代码:...
您可以使用kill()
和计时器在指定的时间间隔后发送它。
埃斯蒂罗马?达卡达(Daca da),拉萨米(Lasa-mi)电子邮件,vreau savorbim ceva。