perl 优雅地关闭子进程

问题描述

我是 perl 的新手。我有一个使用 poe::wheel::run 启动多个子进程的进程。我正在尝试找到一种在收到 SIG{INT} 信号时优雅地停止轮子进程的方法

当它检测到父进程没有运行时,我已经能够优雅地停止子进程。 我有一个 sig_int_handler 可以杀死所有进程(父进程和子进程)

我找不到让子进程检测并处理设置为 true 的 sig_int_flag 的方法。这可能吗???

我想...

  • 接收 SIG{INT}
  • 将变量设置为 sig_int_flag = 1(或其他)
  • 处理程序发送收到信号的消息,然后休眠 30 秒。
  • 30 秒后 -- 终止所有进程。

同时轮子在循环中

  • 处理文件
  • 检查和突破
    • 如果未检测到父 pid 或
    • 如果 sig_int_flag == 1(不工作)
  • 否则处理下一个文件

这个想法是给轮子 30 秒来完成它正在做的事情。如果子进程没有自行死亡——我们杀死它们。

这可能吗?

谢谢

解决方法

我找不到让子进程检测并处理设置为 true 的 sig_int_flag 的方法。这可能吗???

为了让孩子看到父母设置的相同标志,标志必须驻留在共享内存中。

另一种方法是向处理程序设置标志的子进程发送信号。