端末を閉じたりログアウトしたりしても処理を継続させる方法
処理時間が長い処理を走らせる時などで、ターミナルやリモート接続で実行してても途中でターミナルを終了させたり接続が切れても処理を継続できる方法をメモしておく。
実行時に設定する
コマンドとしてはnohup
を使う。
実行時にターミナルが閉じたりしても実行を続行させる
$ nohup コマンド &
コマンド実行時に端末が閉じたりログアウトすると、実行中のプロセスにHUPシグナルが送られ、そのままプロセスも終了する。特にリモートで接続していると接続が切れたり長時間接続し続けないといけないので大変。なのでHUPシグナルを無視して実行し続けるnohupコマンドを使う。
実行時に&
をコマンドの後ろに付けるだけでも大丈夫な場合もあるが、使っているシェルの種類にもよるのでこちらが安定かな。
実行した後に設定する
実行時にnohup
コマンドを忘れたり、実行後に長時間かかることが分かって、後からHUPシグナルを無視して実行してほしい時に設定する方法。
-
ctrl+z
で対象のプロセスを一時停止する。 - バッググラウンドで
bg
コマンドで一時停止したプロセスを再開させる。 -
disown
コマンドを使い、ジョブテーブルから対象のプロセスを削除する。
1はプロセス番号
$ bg 1
$ disown %1
以上