管理fork()守护进程的信号处理

时间:2009-12-22 07:22:43

标签: perl daemon signal-handling

我想在perl中编写一个强大的守护进程,它将在Linux上运行,并遵循描述in this excellent answer的模板。但是我的情况有一些差异:首先我使用Parallel::ForkManager start() and next;在exec('handle_event.pl')

之后紧接着事件

在这种情况下,我有以下问题:

  1. 我应该在哪里定义信号处理程序。我应该在父(守护进程)中定义它们并假设它们将在子进程中继承吗?
  2. 如果我运行exec('handle_event.pl'),处理程序会在exec中继承(我知道它们是在fork上继承的吗?)
  3. 如果我在handle_event.pl中重新定义一个新的信号处理程序,这个定义是否会覆盖父级中定义的那个?
  4. 在这种情况下,最佳做法是什么?
  5. 谢谢

2 个答案:

答案 0 :(得分:5)

fork时,子进程与父进程具有相同的信号处理程序。执行时,任何被忽略的信号都会被忽略;任何处理过的信号都会重置回默认处理程序。

答案 1 :(得分:4)

exec用将要执行的代码替换整个过程代码。由于信号处理程序是过程映像中的代码,因此它们不能在exec之间继承,因此exec会将处理信号的信号处理处置重置为其默认状态(忽略的信号将保持忽略)。因此,您需要在启动时在exec ed过程中安装任何信号处理。