存在するnohupにもかかわらず端末を閉じるとChromeブラウザが終了するのはなぜですか?、端末エミュレータタブに書き込んで実行しました。
$ nohup chromium-browser &
[端末] タブを閉じると、Chrome ブラウザも終了します。 Markは、Chromeブラウザが無視からデフォルト(終了)までSIGHUPの操作を無視するためだと答えました。
代わりに上記の内容を繰り返すdisown -h
とnohup
、
$ chromium-browser & disown -h
端末タブを閉じても Chrome ブラウザが終了しないのはなぜですか? (これはdisown -h
シェルのタスクリストからChromeブラウザプロセスを削除しないので、ChromeブラウザプロセスはまだシェルからSIGHUPを受け取ると仮定します。)
ありがとうございます。
答え1
Chromeはもう少し複雑なので、代わりにスリープを使います。
$ nohup sleep 1000 >& /dev/null &
[1] 5283
これには、HUPを無視する睡眠プロセスがあります。 HUPを送信してデモンストレーションします。
$ kill -SIGHUP 5283
$ kill -SIGHUP 5283
$ kill -SIGHUP 5283
願いより?何もしません。
もう一度拒否しましょう:
$ sleep 1000 &
[1] 5293
$ disown -h
これには、HUPを無視しない睡眠プロセスがあります。 HUPを送信してデモンストレーションします。
$ kill -SIGHUP 5293
$ kill -SIGHUP 5293
bash: kill: (5293) - No such process
[1]+ Hangup sleep 1000
ハハ、死んだ。
古い端末を閉じた後、新しい端末でこれを行うこともできます。明らかに disown -h 後に端末を閉じると、HUP は送信されません。
それでは、nohup chromiumはなぜHUPを無視しないのですか? nohupはHUPを無視するように設定しますが、Chromiumはこの設定を復元することを選択できます。したがって、nohupは、シグナルハンドラの独自のアイデアを持つプロセスに対して非常に非効率的です。
HUPを無視しないことを選択するプロセスがHUPを無視するようにする1つの方法は、最初からHUPを送信しないことです。これにより、HUPについて知らず、HUPを処理するかどうか、および処理方法は重要ではありません。