親シェルを閉じると、プロセスPPIDが1に変わります。

親シェルを閉じると、プロセスPPIDが1に変わります。

新しい端末を開き、次のコマンドを入力しますfirefox&ps -l

4 R  1000 23132 23104 99  80   0 - 2177945 -    pts/27   00:00:07 firefox

コマンドを使用してシェルを閉じると、exitFirefoxサブプロセスは開いたままになります。

いつもこれでしたか? Firefoxも閉じる必要はありませんか?最近のカーネルに新しいものがあるか、私が逃したものがありますか?

結果ps -el|grep firefoxは次のようになります。

4 S  1000 23132     1 14  80   0 - 2233312 poll_s ?      00:00:21 firefox

PPIDが1に変更されました。

PPIDが1になる原因は何ですか?

編集:ああ、ちょうどターミナルを閉じるとシェルを閉じる結果が非常に異なることに気づきました。ターミナルを閉じると、すべての子プロセスが閉じますが、シャットダウンコマンドでシェルを閉じると閉じられません...理由はわかりません。 (ターミナルを閉じるとSIGTERMはすべての子プロセスに転送されますか?しかし、シェルを閉じると孤立プロセスが残りますか?)

答え1

最近のカーネルに新しいものがあるか、私が逃したものがありますか?

いいえ、プロセスが終了すると、その子プロセスは引き続き実行され、その親プロセスはinit(PID 1)に変わります。あるいは、Linuxで「サブリッパー」を見つけるなど、他のシステム依存プロセスもあります。

これは常にそうであり、これは親プロセスを2回フォークし、呼び出して終了し、デーモンに移行するプロセスのnohup効率的な作業と不良を可能にします。setsid()

ターミナルセッションを閉じると、SIGHUP残りのプロセスに送信できますが、これを無視してもかまいません(これは完了ですnohup)。またsystemd、ターミナルログインセッションの終了時に遅延プロセスを終了するように設定できますが、firefoxターミナルエミュレータのXで実行されている可能性があるため、これは適用されません。

関連情報