【问题标题】:How to send a signal to all process from child process?如何从子进程向所有进程发送信号?
【发布时间】:2013-05-19 14:20:36
【问题描述】:

我正在尝试使用 fork() 调用来做一个套接字编程示例,我的问题是:当一个子进程完成一项工作时,我想杀死所有其他进程。我想如果我向其他人发送一个信号......这可能还是有人告诉我一个方法?

【问题讨论】:

  • 正在使用 kill() 和父进程的子进程 ID,您可以杀死所有子进程
  • 我的问题是:我有 4 个正在运行的进程(一个是父进程,3 个是子进程)并且他们尝试连接 TCP 套接字......当其中一个执行此操作时,我想杀死其他进程。跨度>
  • 你的 4 个子进程是服务器/客户端吗?
  • 对不起!,父母应该是客户端,你的服务器进程是分隔的??认为它看起来你的设计对我来说是错误的!..它的代码也有点微不足道(至少对我来说)......
  • 好的,也许你知道“4 手机 2 基站和一个目标”套接字编程项目......通过 2 个 fork() 调用,我有 4 个手机。如果其中一个子进程连接目标我想杀死其他人。如果一个过程已经连接,有没有办法知道它们。?如果它们连接到目标,它们可以相互控制吗?

标签: c++ c sockets fork


【解决方案1】:

在partent 开始时(在它fork 子代之前),调用setpgid(0,0)。这将使进程组 ID 与父进程的 PID 相同。这个 PGID 将被每个子进程继承,任何进程都可以通过调用kill(signal, -getpgid(0)) 向组中的所有进程发送信号。

【讨论】:

  • 请注意,这也隐含地将信号发送到调用了kill() 命令的进程。
  • 它很有用但是,我收到一条消息......这正常吗?
【解决方案2】:

杀死进程组的常用方法是使用 killpg() 系统调用。来自手册页:

“killpg() 将信号 sig 发送到进程组 pgrp。”

与 killpg() 一起,可能还需要 get/setpgid 来正确设置组。

【讨论】:

  • 这个比较有用。我没有收到消息。 :)。非常感谢你。感谢您的关注
【解决方案3】:

你可以用这个:

killpg( 0, SIGNALTYPE);

您可以向所有孩子发送信号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2019-06-02
    • 2013-07-30
    • 2022-06-15
    • 2017-07-11
    相关资源
    最近更新 更多