nohup と & は使用とは異なります

 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プロセスはクローズされません。

おすすめ

転載: blog.csdn.net/mijichui2153/article/details/120130516