シグナル(sighup)、ジョブ、制御端末に関する説明

シグナル(sighup)、ジョブ、制御端末に関する説明

そこで私は 2 つの異なる視点を読んで、どちらが正しいのかを判断しようとしています。

1) オンラインの情報源の中には、制御端末から送信されるシグナルはフォアグラウンド プロセス グループにのみ送信されると記載されているものがあります。つまり、ログアウト時にプロセスをバックグラウンドで実行し続けたい場合は、ジョブを一時停止 (ctrl-Z) し、バックグラウンドで再開 (bg) するだけで十分です。その後、ログアウトしても SIGHUP はフォアグラウンド ジョブにのみ送信されるため、プロセスは引き続き実行されます。

見る:http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/

...さらに、シグナル生成文字が端末によって読み取られると、フォアグラウンド プロセス グループに適切なシグナルが生成されます。...

2) 他の情報源によると、プログラムの実行時に「nohup」コマンドを使用する必要があるとのことですが、それができない場合は、実行中に「disown」コマンドを発行して、SIGHUP をリッスンするジョブ テーブルからプログラムを削除する必要があるとのことです。ログアウト時にこれを行わないと、バックグラウンド プロセス グループで実行されている場合でもプロセスが終了するとのことです。

例えば:http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm

...とにかくログアウトすると、シェルはバックグラウンド ジョブに HUP 信号を送信します...

Ubuntu Linux での私の実験では、1) が正しいようです。コマンド「sleep 20 &」を実行してからログアウトし、再度ログインして「ps aux」を押しました。確かに、sleep コマンドはまだ実行されていました。

それでは、なぜ多くの人が 2 番を信じているのでしょうか? また、ジョブを実行し続けるにはバックグラウンドに配置するだけでよいのであれば、なぜ多くの人が「nohup」や「disown」を使用するのでしょうか?

関連情報