新しい端末を開いてコマンド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が送信されますか?しかし、シェルを閉じると、孤立した状態になりますか?)
最近のカーネルに何か新しいものや欠けているものはありますか?
いいえ、プロセスが終了しても、その子は実行を続け、親プロセスはinit
(PID 1)に変更されます。または、他のシステム依存のプロセスを調べます。 Linuxの「サブリーパー」。
これは常に当てはまります。これにより、Nohup
が便利に機能し、2回フォークして、setsid()
を呼び出し、親プロセスを終了することで、プロセスをデーモンに変える古いプロセスが可能になります。
ターミナルセッションを閉じると、そこにある残りのプロセスにSIGHUP
が送信される可能性がありますが、無視してもかまいません(Nohup
が行うことです)。また、systemd
は、ターミナルログインセッションの終了時に残りのプロセスを強制終了するように構成できますが、ターミナルエミュレータからX内でfirefox
を実行している可能性があるため、適用されません。