C语言,杀死所有进程

3

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


你想要一个能够执行此操作的shell脚本,还是在服务器程序中实现? - Some programmer dude
@user1929959 僵尸进程已经死亡。 - sr01853
我想要在服务器程序中实现,操作系统:Linux,POSIX。 - Jones
4个回答

2

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

您可以通过shell来执行此操作 - 在Linux下,您正在搜索的是killall命令。

您可以使用线程代替进程(如果项目细节允许的话),并通过变量进行通信。


是的,我可以使用线程,但我已经完成了这个项目...如果我想要修改它以使用线程,那将需要很多工作。我只需要完成这件事才能结束它,而且我知道我的老师会尝试:在服务器上按CTRL+C,客户端仍在运行,这不好...谢谢你的回答,我会尝试的。 - Jones

1
这将在shell中为您完成:

killall -15 <process name>

在C语言中,你可以尝试以下代码:

kill(0, SIGKILL)

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

0

我建议这应该是实现定义的。你需要保留forks的PIDs,将CTRL+C发送到服务器的signal (在POSIX中的SIGINT)挂钩,并使用操作系统推荐的任何方法来杀死它们(在POSIX环境下为kill)。


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接