nohup: ハングアップの影響を受けないコマンドを実行します。
SIGHUP 信号: ユーザー端末接続 (正常または異常) の最後、通常は端末制御プロセスの最後に送信され、同じセッション内の各ジョブに通知され、制御端末との関連付けが解除されます。システムは SIGHUP シグナルに応答します。デフォルトの処理では、シグナルを受信したプロセスが終了します。
結論を先に置いておきます。
使用およびバックグラウンド実行プログラム:
①結果が端末に出力されます。
② Ctrl+C を使用して SIGINT シグナルを送信します。プログラムは影響を受けません。
③セッションを閉じてSIGHUPを送信すると、プログラムが閉じます。
nohup を使用してプログラムを実行します。
①結果はデフォルトで nohup.out に出力されます; # バッチでブラッシングされる可能性がありますが、それほどリアルタイムではありません
② Ctrl+C を使用して SIGINT シグナルを送信すると、プログラムが閉じます。
③セッションを閉じてSIGHUPを送信すると、プログラムは影響を受けません。
日常的に使用:
オンラインで nohup と & を試して、 nohup ./test &; などのスタートアップ プログラムと連携します。
- SIGINT 信号と SIGHUP 信号に対する同時耐性。
0. まず次のテストコードを書きます
#include "stdio.h"
int main()
{
int i =0;
while(1){
printf("hello world! %d\n",i++);
sleep(1);
}
}
ループ出力 hello world! + ラウンド数、各サイクルは 1 秒です。
gcc test.c -o test
1. まず、./test プログラムを直接実行します。
効果は次のとおりです。
①Ctrl+C キーの組み合わせ、SIGINT シグナルを受信、プログラムのデフォルト動作は終了します。
2. ./テストしてプログラムを実行する
効果は次のとおりです。
①まずターミナルにプロセス番号が表示されますが、これが起動プロセスのプロセス番号です。
②Ctrl+C を押すと SIGINT シグナルが送信され、プログラムは引き続き実行されます。
③ セッションを終了(シェル端末全体を閉じる)し、SIGHUP シグナルを受信した後、プログラムを終了します。
3. nohup ./test を使用してプログラムを実行します
効果は次のとおりです。
①プロセス番号が最前面に表示されない
②「入力を無視し、出力を「nohup.out」に追加します」というプロンプトが表示されます。
③hello world!がフォアグラウンドに表示されませんでした
④クローズセッションプログラムがSIGHUPシグナルを受信しても終了しない
⑤Ctrl+C プログラムは SIGINT 信号受信後に終了します。
4. Nohup は & と組み合わせて使用されます
① SIGINTプロセスはクローズされません
②SIGHUPプロセスはクローズされません。