我有一个上学项目,我需要一些帮助。 我在C工作,我有一个服务器和一个客户端。在服务器中,我使用fork为每个客户端创建一个新进程。我的问题是:如果我用CTRL + C关闭服务器,我如何杀死所有剩余的进程?感谢
答案 0 :(得分:2)
您可以在创建pid后存储它们,然后在退出时向其发出sigterm
或sigkill
信号。
你可以通过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环境中终止它们)。