| 開発者 | さまざまなオープンソースおよび商用開発者 |
|---|---|
| オペレーティング·システム | Unix、Unix ライク、IBM i |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
nohupは、「ハングアップなし」を意味するPOSIXコマンドです。その目的は、 HUP (ハングアップ) 信号を無視してコマンドを実行し、ユーザーがログアウトしても停止しないようにすることです。
通常はターミナルに送信される出力は、まだリダイレクトされていない場合は、 nohup.outというファイルに送信されます。
使用
以下の最初のコマンドは、abcdその後のログアウトによってプログラムが停止しないように、プログラムをバックグラウンドで起動します。
$ nohup abcd & $ exit
これらの方法は、ログアウト時にプロセスに「停止」信号が送信されないようにするが、これらの標準 I/O ファイル (stdin、stdout、または stderr) の入出力が受信されている場合は、端末がハングすることに注意してください。[1]以下の「ハングの克服」を参照してください。
nohup は、プロセスを低い優先度で実行するために niceコマンドと組み合わせて使用されることが多いです。
$ nohup いいえ abcd &
実装
一部のシェル (例: bash )では、既存のジョブが nohup で開始されていない場合でも、SIGHUPが送信または伝播されるのを防ぐために使用できるシェル組み込みコマンドが提供されています。bash では、 を使用してこれを実行できます。同じ組み込みコマンドを引数なしで使用すると、ジョブがジョブ テーブルから削除され、ジョブがシグナルを受信しなくなることも意味します。アクティブなジョブで使用する前に、 でジョブを停止し、コマンドでバックグラウンドで続行する必要があります。[2]関連する別の bash オプションは で、これはシェルが正常に終了するときにジョブに HUP シグナルを自動的に送信します。[3]disown -h jobdisownCtrl-Zbgshopt huponexit
AIXおよびSolaris版のnohupには、実行中のプロセスを変更して将来のSIGHUPシグナルを無視するオプションがあります。上記のbashの組み込みとは異なり、プロセスIDを受け入れます。[4]-pdisownnohup -p
nohupコマンドはIBM iオペレーティングシステムにも移植されています。[5]
ぶら下がりを克服する
バックグラウンドジョブを nohupping するのは、通常、リモートSSH セッションからログオフするときにジョブが終了しないようにするためです。この状況でよく発生する別の問題は、バックグラウンドジョブから/へのデータを失うことを拒否するため、ssh がログオフを拒否する (「ハングする」) ことです。[6] [7]この問題は、3 つの I/O ストリームすべてを リダイレクトすることでも解決できます。
$ nohup ./myprogram > foo.out 2 > foo.err < /dev/null &
また、擬似端末が割り当てられていない場合など、SSHセッションの終了時に依存プロセスにHUP信号が送信されるとは限らないことにも注意してください。 [8]
代替案
- ターミナルマルチプレクサは、現在のターミナルから切り離された別のセッションでコマンドを実行できます。つまり、現在のセッションが終了した場合、切り離されたセッションとそれに関連するプロセスは実行され続けます。その後、セッションに再接続できます。
- たとえば、次のscreenの呼び出しは、分離されたセッションのバックグラウンドで somescript.sh を実行します。
$スクリーン -A -m -d -S 誰かの名前 ./somescript.sh &
- disownコマンドは、ジョブ テーブルからジョブを削除したり、セッション終了時に SIGHUP 信号が送信されないようにジョブをマークしたりするために使用されます。
参考文献
- ^ 「Re: nohup/disown and logout」Zsh.org、2005年2月7日。2009年5月18日時点のオリジナルよりアーカイブ。 2009年6月10日閲覧。
- ^ Bash リファレンスマニュアル、 Wayback Machineで 2010-12-03 にアーカイブ。Gnu.org。2015-04-13 に取得。
- ^ Bash リファレンスマニュアル、 Wayback Machineで 2010-12-03 にアーカイブ。Gnu.org。2015-04-13 に取得。
- ^ IBM Knowledge Center、Wayback Machineで 2014-10-15 にアーカイブ。01.ibm.com (2015-03-26)。2015-04-13 に取得。
- ^ IBM . 「IBM System i バージョン 7.2 プログラミング Qshell」(PDF) . IBM . 2020 年 9 月 5 日閲覧。
- ^ 「SSH に関するよくある質問」。Snailbook.com。2009 年 1 月 22 日時点のオリジナルよりアーカイブ。2009年 6 月 10 日閲覧。
- ^ 「OpenSSH FAQ」。Openssh.com。2005 年 9 月 20 日。2009 年 7 月 10 日にオリジナルからアーカイブ。2009年 6 月 10 日に取得。
- ^ 「バグ 396 – pty が割り当てられていない場合、sshd はプロセスを孤立させる」。Bugzilla.mindrot.org。2009年 6 月 10 日閲覧。
外部リンク
- Solaris のマニュアルページからの nohup
