0

initに親を変更するプログラムがあるため、次のコードを使用できません。

pid=Process.spawn("xxx")
Process.wait(pid) #started xxx with pid, 
                  #but it respawned itself to 
                  #pid2 which has the ppid set to 1

新しいpidが何であるかを追跡する方法があるかどうかはわかりません。

4

1 に答える 1

1

質問の形式が少し間違っています。ただし、cgroup を使用してこれを行うことができます。アクティビティ用の新しい cgroup マウント ポイントを作成します。これには、システム内のすべてのプロセスを含む「タスク」ファイルがあります。次に、このディレクトリのサブディレクトリを作成すると、独自の (空の) タスク ファイルが自動的に取得されます。プロセスの PID をこの新しいタスク ファイルに書き込むだけです。それとそのすべての子は、常にそのタスク ファイルに表示され、システムの残りのファイルには表示されません。cgroup を「エスケープ」する唯一の方法は、タスク ファイルへの書き込みアクセス権を持つことです。

はい、これは複雑に聞こえますが、実際にはそうではありません。これは、systemd がプロセス ツリーを追跡するために使用するメカニズムです。おそらく同じ理由で、親に何が起こったかに関係なく、プロセスのすべての子を強制終了します。

明らかに、あなたの質問に対するより簡単な答えは、「systemd を使用する」かもしれません。

于 2013-02-13T22:48:38.430 に答える