nohup
コマンドは、引数として指定された別のプログラムを実行し、すべてのSIGHUP
を無視します (ハングアップ)信号。 SIGHUP
制御端末が閉じているときにプロセスに送信される信号です。
通常、SSH経由でプログラムを実行する場合、接続が切断されるかログアウトすると、セッションが終了し、端末から実行されたすべてのプロセスが停止します。ここがnohup
コマンドが便利です。すべてのハングアップシグナルを無視し、プロセスは引き続き実行されます。
nohupコマンドの使用方法#
nohup
の構文 コマンドは次のとおりです:
nohup COMMAND [ARGS]
このコマンドは、標準の--help
以外のオプションを受け入れません。 および--version
。
次の例を見てみましょう:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
mycommand
を実行します フォアグラウンドでコマンドを実行し、コマンド出力をnohup.out
にリダイレクトします ファイル。このファイルは、現在の作業ディレクトリに作成されます。コマンドを実行しているユーザーが作業ディレクトリへの書き込み権限を持っていない場合、ファイルはユーザーのホームディレクトリに作成されます。
ログアウトするか、ターミナルを閉じても、プロセスは終了しません。
バックグラウンドでコマンドを実行する#
nohup
を使用する コマンドが完了するまでシェルを操作できないため、フォアグラウンドではあまり役に立ちません。
コマンドをバックグラウンドで実行するには、&
を追加します コマンドの最後にある記号:
nohup mycommand &
出力には、シェルジョブID(角かっこで囲まれています)とプロセスIDが含まれます:
[1] 25177
fg
を使用すると、ジョブIDを使用してコマンドをフォアグラウンドに移動できます。 コマンド。
何らかの理由でプロセスを終了したい場合は、kill
を使用してください コマンドの後にプロセスIDが続く:
kill -9 25132
出力をファイルにリダイレクトする#
デフォルトでは、nohup
コマンド出力をnohup.out
にリダイレクトします ファイル。出力を別のファイルにリダイレクトする場合は、標準のシェルリダイレクトを使用します。
たとえば、標準出力と標準エラーをmycommand.out
にリダイレクトします。 使用するもの:
nohup mycommand > mycommand.out 2>&1 &
標準出力と標準エラーを別のファイルにリダイレクトするには:
nohup mycommand > mycommand.out 2> mycommand.err &
代替案#
端末を閉じたり切断したりしたときにコマンドが終了しないようにするために使用できる代替プログラムがいくつかあります。
Screenor GNU Screenは、スクリーンセッションを開始し、そのセッション内で任意の数のウィンドウ(仮想端末)を開くことができるターミナルマルチプレクサプログラムです。 Screenで実行されているプロセスは、切断されてもウィンドウが表示されていない場合でも実行を継続します。
Tmux#
TmuxisはGNUscreenの最新の代替手段です。 Tmuxを使用すると、セッションを作成して、そのセッション内で複数のウィンドウを開くこともできます。 Tmuxセッションは永続的です。つまり、Tmuxで実行されているプログラムは、ターミナルを閉じても実行され続けます。
否認#
disown
シェルのジョブコントロールからシェルジョブを削除するシェルビルトインです。 nohup
とは異なり 、disown
を使用できます プロセスの実行についても。
結論#
nohup
ログアウトまたはターミナルを終了するときにコマンドが終了するのを防ぐことができます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。