3

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

4

4 回答 4

2

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

你可以通过 shell 来实现——killall这就是你在 linux 下搜索的东西。

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

于 2013-01-28T08:28:12.947 回答
1

这将在 shell 中为您完成:

killall -15 <process name>

在 C 中,您可以尝试:

kill(0, SIGKILL)

SIGINT您的主服务器进程的信号处理程序中杀死其进程组中的所有进程,其中应包括其子进程。

于 2013-01-28T08:26:29.553 回答
0

我建议这将是实现定义的。您需要保留分叉的 PID,挂钩CTRL+C 发送到您的服务器的信号(POSIX 中的 SIGINT)并使用您的操作系统推荐的任何方法(在 POSIX 环境中 kill)杀死它们

于 2013-01-28T08:32:19.820 回答
0

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

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

于 2013-01-28T08:47:37.483 回答