一般的なTrueOS

一般的なTrueOS

新しく起動したプロセスの親プロセスを設定したいのですが可能ですか?

たとえば、ログインマネージャを介して新しいデスクトップ環境セッションを開始すると仮定すると、プロセスツリーは次のようになります。

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

おすすめ記事