「サブハーベスター」プロセスとは何ですか?

「サブハーベスター」プロセスとは何ですか?

一部の回答では、「subreaper」という単語を使用しました。 Google で検索すると、「使用済み」という単語も検索されます。

「サブハーベスター」とは何かをどのように理解していますか?

ベストアンサー1

これは次のように実装されました。Linuxカーネル3.4システムコールのフラグとしてprctl()

prctl(2)マンページから:

init(1)[...] Sub-Reaper は子プロセスの役割を果たします。孤児プロセス(つまり、直系の親が終了)が終了し、子リッパーがあるとマークされている場合は、最も近い生存先祖子リッパーがシグナルを受け取り、そのプロセスで自分の終了状態を検出SIGCHLDできます。wait(2)

プロセスは自分自身を子リッパーとして定義できますprctl(PR_SET_CHILD_SUBREAPER)。そうでinitあれば(PID 1)ではなく、孤児の親になります。サブプロセス代わりに、子孫である最も近い生存祖父母が新しい親になります。生きている祖父母様がいなければinit

このメカニズムを実装する理由は、ユーザースペースサービス管理者/監督者です。upstartsystemd)開始するサービスを追跡する必要があります。多くのサービスがデュアルフォークを介してデーモン化され、暗黙的に取得されます。育児PID 1で。サービス管理者は信号を受信できなくなり、SIGCHLD収集の責任を負いません。wait()。 PID 1 クリーンアップがプロセスを再親化すると、子プロセスに関するすべての情報が失われます。サービスマネージャプロセスは、自分自身を一種の「サブ初期化プログラム」としてマークできるようになり、開始されたサービスに対して作成されたすべての孤立プロセスの親プロセスとして残ることができます。すべてのSIGCHLDシグナルはサービスマネージャに渡されます。

Linuxでは、通常、次のコマンドを使用してデーモンプロセスが作成されます。分岐両方とも孫をフォークした後、中間プロセスは終了しました。避けるための一般的な技術です。ゾンビプロセス。初期化スクリプトは子プロセスを呼び出します。その子がまたフォークしてすぐ終了しました。孫は養子縁組される予定で、ゾンビを避けるために子孫を集める終了状態を引き続きinit呼び出します。wait()サブリッパーの概念を使用すると、ユーザースペースサービスマネージャは今init

おすすめ記事