web-dev-qa-db-ja.com

Nohupは不定ですか?

Nohupを使用して無限ループでプログラムを実行した場合、プログラムは無期限に実行されますか(マシンがリセットされるまで、または手動で終了するまで)?

4
Anne Nonimus

Nohupは、HANGUP信号のデフォルトの動作を設定します。これは、アプリケーションによってオーバーライドされる可能性があります。許可(rootまたは同じユーザー)または不正な動作(セグメンテーション違反、バスエラー)を持つ他のプロセスからの他のシグナルも、プログラムの終了を引き起こす可能性があります。リソース制限(ulimit)もプログラムを終了させる可能性があります。

これらを除けば、無限ループは非常に長い時間実行される可能性があります。

13
kmarsh

以下は、Nohupの ソースコード からの2つの重要な行です。

_(void)signal(SIGHUP, SIG_IGN);_ // SIGHUPを無視する

execvp(*argv, argv); //コマンドを実行します。

したがって、アプリケーションが次のようなものを呼び出すまで

signal (SIGHUP, SIG_DFL); //またはカスタムシグナルハンドラー

通常の状況では、マシンを再起動するか、自分で強制終了するまで実行され続けます。
場合によっては終了することもあります kmarshが指す

5
Hemant