C,杀死所有进程

时间:2013-01-28 08:23:09

标签: c

我有一个上学项目,我需要一些帮助。 我在C工作,我有一个服务器和一个客户端。在服务器中,我使用fork为每个客户端创建一个新进程。我的问题是:如果我用CTRL + C关闭服务器,我如何杀死所有剩余的进程?感谢

4 个答案:

答案 0 :(得分:2)

您可以在创建pid后存储它们,然后在退出时向其发出sigtermsigkill信号。

你可以通过shell来实现 - killall就是你在linux下搜索的内容。

您可以使用线程而不是进程(可能是您?项目详细信息说的是什么?)并通过变量进行通信。

答案 1 :(得分:1)

当你单独杀死一个进程时,它不会杀死孩子。

如果您希望给定组的所有进程都接收到信号,则必须将信号发送到进程组:kill -9 -parentpid。否则,孤儿将被链接到init

答案 2 :(得分:0)

这将在shell中为您完成:

killall -15 <process name>

在C中,您可以尝试:

kill(0, SIGKILL)

在主服务器进程的SIGINT信号处理程序中,以终止其进程组中的所有进程,其中应包括其子进程。

答案 3 :(得分:0)

我建议这是实现定义的。您需要保留forks的PID,挂钩CTRL + C发送到服务器的signal(POSIX中的SIGINT)并使用操作系统建议的任何方法(POS {0}}在POSIX环境中终止它们)。