Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c中杀死父进程及其所有子进程?_C_Linux_Multiprocess - Fatal编程技术网

如何在c中杀死父进程及其所有子进程?

如何在c中杀死父进程及其所有子进程?,c,linux,multiprocess,C,Linux,Multiprocess,因此,应该调用以下函数来终止父进程。但它使子进程保持活力。我知道您可以将一个参数传递给sigkill-in-shell命令,以终止此进程组下的所有子进程。但是如何在C中实现这一点呢 kill(parent, SIGKILL); 您可以通过kill(负数、信号)或killpg()向进程组发送信号 有关详细信息,请参阅。基本上,当您fork()或execve()时,子进程将具有相同的PGID(进程组id) 另一种方法是为父进程安装一个信号句柄。当父节点收到信号时,父节点向其子节点发送信号并杀死它们

因此,应该调用以下函数来终止父进程。但它使子进程保持活力。我知道您可以将一个参数传递给sigkill-in-shell命令,以终止此进程组下的所有子进程。但是如何在C中实现这一点呢

kill(parent, SIGKILL);

您可以通过
kill(负数、信号)
killpg()
向进程组发送信号

有关详细信息,请参阅。基本上,当您
fork()
execve()
时,子进程将具有相同的
PGID
(进程组id)


另一种方法是为父进程安装一个信号句柄。当父节点收到信号时,父节点向其子节点发送信号并杀死它们。请参见

它如何使其子进程保持打开状态?你一定忽略了什么。也许他们在幕后?@marekful嗨。如果在c/c++中使用此函数终止父进程,子进程仍然向前运行。这很奇怪。所以,当我在Linux中从shell杀死一个进程,并且子进程被自动杀死时,谁会杀死子进程?内核?我不知道为什么会发生这种情况…您可以尝试运行两个进程,它们都只是在ifinite循环中打印。尝试杀死父进程,子进程仍然会知道,这可能会杀死比目标进程及其子进程更多的进程。所有父进程、它的其他子进程以及整个进程树,直到类似原始登录会话的部分,都可能位于同一进程组中。或函数可用于创建新的流程组。