web-dev-qa-db-ja.com

親シェルを閉じた後、PPIDが1に変更されたプロセス

新しい端末を開いてコマンドfirefox&を入力すると、ps -lは次のようになります。

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

コマンドexitでシェルを閉じると、Firefoxの子プロセスは開いたままになります。

いつもそうだったのですか? Firefoxも閉鎖されることになっているのではないですか?最近のカーネルに何か新しいものや欠けているものはありますか?

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

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

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

このPPIDが1に変更された原因は何ですか?

編集:ああ、ターミナルを閉じるとシェルを閉じると結果が大きく異なることに気づきました。ターミナルを閉じるとすべての子プロセスが閉じますが、exitコマンドでシェルを閉じるとそうではありません...理由はわかりません。 (ターミナルを閉じると、すべての子プロセスにSIGTERMが送信されますか?しかし、シェルを閉じると、孤立した状態になりますか?)

3
bob dylan

最近のカーネルに何か新しいものや欠けているものはありますか?

いいえ、プロセスが終了しても、その子は実行を続け、親プロセスはinit(PID 1)に変更されます。または、他のシステム依存のプロセスを調べます。 Linuxの「サブリーパー」。

これは常に当てはまります。これにより、Nohupが便利に機能し、2回フォークして、setsid()を呼び出し、親プロセスを終了することで、プロセスをデーモンに変える古いプロセスが可能になります。

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

3
ilkkachu