我想在perl中编写一个强大的守护进程,它将在Linux上运行,并遵循描述in this excellent answer的模板。但是我的情况有一些差异:首先我使用Parallel::ForkManager start() and next
;在exec('handle_event.pl')
在这种情况下,我有以下问题:
exec('handle_event.pl')
,处理程序会在exec中继承(我知道它们是在fork
上继承的吗?)handle_event.pl
中重新定义一个新的信号处理程序,这个定义是否会覆盖父级中定义的那个?谢谢
答案 0 :(得分:5)
fork时,子进程与父进程具有相同的信号处理程序。执行时,任何被忽略的信号都会被忽略;任何处理过的信号都会重置回默认处理程序。
答案 1 :(得分:4)
exec
用将要执行的代码替换整个过程代码。由于信号处理程序是过程映像中的代码,因此它们不能在exec
之间继承,因此exec
会将处理信号的信号处理处置重置为其默认状态(忽略的信号将保持忽略)。因此,您需要在启动时在exec
ed过程中安装任何信号处理。