【问题标题】:C, kill all processesC、杀死所有进程
【发布时间】:2013-01-28 08:23:09
【问题描述】:

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

【问题讨论】:

  • 你想要一个shell脚本来完成它,还是在服务器程序中完成它?
  • @user1929959 僵尸进程已经死亡。
  • 我希望它在服务器程序中,操作系统:linux,POSIX

标签: c


【解决方案1】:

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

您可以通过 shell 来完成 - killall 是您在 linux 下搜索的内容。

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

【讨论】:

  • 是的,我可以使用线程,但我已经完成了这个项目。如果我想修改它以使用线程,需要做很多工作。我只有这件事要做,我知道我的老师会尝试:服务器上CTRL+C,客户端还在运行,这不好..谢谢你的回答,我会试试的
【解决方案2】:

这将在 shell 中为您完成:

killall -15 <process name>

在C中,你可以试试:

kill(0, SIGKILL)

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 2019-01-31
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        相关资源
        最近更新 更多