デーモンで強力な親/子プロセスを識別する方法はありますか?次の例を考えてみましょう。
- PID 123がPID 124に分岐
- PID 124 は setid を呼び出します。
- PID 124がPID 125に分岐
- PID 124 終了
- PID 123 PID 124 を待ちます。
これで、PID 125がPID 123の子孫であることをどのように確認できますか?明らかに親PIDは機能しません(親プロセスはPID 124で終了したため1になります)。 SIDも機能しません(124になり、終了して収集されたため、情報は利用できません)。
答え1
数値IDフィールドだけでは不可能です。 Linuxでは、制御グループ(cgroup)は階層的であり、プロセスはそのcgroupを離れることができないため、この問題を解決するために使用できます。
これがプロセスツリーを追跡するためにcgroupを使用するsystemdとは異なり、既存のinitシステムには特定のサービスによって開始されたプロセスを確認するための信頼できる方法がないため、そのプロセスを終了する信頼できる方法もない理由です。