utte

nohup ログアウトしてもコマンドが止まらないように実行する

nohup コマンド [引数...] [&]

試してみる

主なオプション

コマンド &末尾に & を付けて、バックグラウンドで実行する(nohup 自体にはバックグラウンドにする働きはない)
> ファイル 2>&1標準出力と標準エラー出力をファイルに書き出す
--help使い方を表示する

解説

SIGHUP を無視する

端末を閉じたりログアウトしたりすると、その端末で動いているプロセスに SIGHUP(ハングアップ)というシグナルが送られ、通常は終了してしまいます。nohup を付けて起動したコマンドは、SIGHUP を無視するので、ログアウトしたあとも動き続けます。時間のかかる処理を、接続を切っても走らせておくときに使います。

バックグラウンドにするのは & の役割

nohup 自体は、コマンドをバックグラウンドにしません。実行中の端末を占有させたくないときは、末尾に & を付けます。nohup 処理 & が定番の形です。

出力の行き先

標準出力が端末のままだと、nohup は出力を nohup.out というファイルに追記します(書き込めなければ $HOME/nohup.out)。そのとき nohup: ignoring input and appending output to 'nohup.out' というメッセージが出ます。標準出力が端末でなければ、nohup.out は作られません。ファイルの名前を決めたいときや、出力が要らないときは、> ファイル 2>&1 や >/dev/null 2>&1 で自分でリダイレクトします。

試験でのポイント

nohup は、SIGHUP を無視させるコマンドです。その他にも、screen や tmux を使うと、切断しても処理を継続でき、あとから接続し直せます。ジョブを実行中の bg や jobs と合わせて覚えておきましょう。

このコマンドを使う問題

  1. nohupでログアウト後も動き続けるように実行する

関連するコマンド

LinuC 101の出題範囲