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が何であるかを追跡する方法があるかどうかはわかりません。
質問の形式が少し間違っています。ただし、cgroup を使用してこれを行うことができます。アクティビティ用の新しい cgroup マウント ポイントを作成します。これには、システム内のすべてのプロセスを含む「タスク」ファイルがあります。次に、このディレクトリのサブディレクトリを作成すると、独自の (空の) タスク ファイルが自動的に取得されます。プロセスの PID をこの新しいタスク ファイルに書き込むだけです。それとそのすべての子は、常にそのタスク ファイルに表示され、システムの残りのファイルには表示されません。cgroup を「エスケープ」する唯一の方法は、タスク ファイルへの書き込みアクセス権を持つことです。
はい、これは複雑に聞こえますが、実際にはそうではありません。これは、systemd がプロセス ツリーを追跡するために使用するメカニズムです。おそらく同じ理由で、親に何が起こったかに関係なく、プロセスのすべての子を強制終了します。
明らかに、あなたの質問に対するより簡単な答えは、「systemd を使用する」かもしれません。