新しく起動したプロセスの親プロセスを設定したいのですが可能ですか?
たとえば、ログインマネージャを介して新しいデスクトップ環境セッションを開始すると仮定すると、プロセスツリーは次のようになります。
init
\- login-manager
\- de-session
これで、セッションで起動する必要がある最も重要なアプリケーションを起動するスクリプトがあり、さまざまな理由でDEを自動起動マネージャに移行する代わりにスクリプトとして保持したいと思います。次のようになります。
#!/usr/bin/env
application1 &
application2 &
application3 &
セッションの開始時にこのコマンドを自動的に実行した後、プロセスツリーは次のようになります。
init
|- application1
|- application2
|- application3
\- login-manager
\- de-session
しかし、私が実際にしたいのは、セッションでこれらのプロセスを次のように「再定義」することです。
init
\- login-manager
\- de-session
|- application1
|- application2
\- application3
それでは、他のプロセスで「親プロセスをリセット」する方法はありますか?
ベストアンサー1
一部のシステムでは、プロセスを次のように表示できます。子供用収穫機これにより、init
すべての子孫に対して孤児プロセスを採用する役割を担うことができます。
LinuxではPR_SET_CHILD_SUBREAPER
prctl()
。
したがって、次のように始めることができますde-session
(Linuxの値はここにハードコードされていますPR_SET_CHILD_SUBREAPER
)。
perl -e 'require "syscall.ph";
syscall(&SYS_prctl,36,1) >= 0 or die "cannot set subreaper: $!";
exec("de-session");'
ただし、de-session
生成されたことのないプロセスからSIGCHLD信号を受信すると混乱する可能性があります。あなたのプロセスinit
はこれらの問題に対処するように設計されていますが、あなたのものではないかもしれないので、継承したくないプロセスの終了を決して認めないので、de-session
ゾンビ軍が発生する可能性があります。de-session