2

Linuxで実行され、この優れた回答で説明されているテンプレートに従っている堅牢なデーモンをperlで作成したいと思います。ただし、私の状況にはいくつかの違いがあります。最初に、Parallel::ForkManager start() and nextを使用しています。イベントの直後にフォークするexec('handle_event.pl')

そのような状況で、私は次の質問があります:

  1. シグナルハンドラーはどこで定義すればよいですか。それらを親(デーモン)で定義し、子に継承されると想定する必要がありますか?
  2. 実行exec('handle_event.pl')すると、ハンドラーはexec全体で継承されますか(ハンドラーはfork)全体で継承されますか?
  3. で新しいシグナルハンドラーを再定義した場合handle_event.pl、この定義は親で定義されたものをオーバーライドしますか?
  4. このような状況でのベストプラクティスは何ですか?

ありがとうございました

4

2 に答える 2

5

フォークすると、子プロセスには親と同じシグナルハンドラーがあります。実行すると、無視されたシグナルは無視されたままになります。処理されたシグナルはすべてデフォルトのハンドラーにリセットされます。

于 2009-12-22T08:22:49.537 に答える
4

exec、プロセスコード全体を実行されるコードに置き換えます。シグナルハンドラーはプロセスイメージ内のコードであるため、を介して継承することはできませんexec。したがってexec、処理されたシグナルのシグナル処理処理をデフォルト状態にリセットします(無視されたシグナルは無視されたままになります)。execしたがって、起動時にedプロセスに信号処理をインストールする必要があります。

于 2009-12-22T08:13:07.140 に答える