シェルスクリプトなどを実行中にSSH接続を切断(Tera Termやputtyなど)、ターミナル エミュレータの終了、OSからログアウトをするとジョブが死んでしまいます。
バックグラウンド ジョブを起動したプロセス(ログイン シェル)が子プロセスである該当のバックグラウンドジョブをハングアップ シグナル( HUP )によって終了させるためです。
シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視しています。
なのでログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまうため親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill ( kill -HUP ) するのです。
なのでログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまうため親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill ( kill -HUP ) するのです。
コマンド
nohup コマンド &
例
1.オプションなし
nohup ./shell.sh &
shell.sh の標準出力、標準エラー出力に送られたデータはプログラムを実行したディレクトリに nohup.out というファイル名で保存される。
プログラムを実行したディレクトリに書き込み権限が無ければ $HOME/nohup.out に保存される。
2.標準出力先の指定
nohup ./shell.sh > out.log &
shell.sh の標準出力が out.log になる。
標準エラー出力は nohup.out で保存先は例1と同様にプログラムを実行したディレクトリか $HOME になる。
3.標準エラー出力先を指定する
nohup ./shell.sh > out.log 2> err.log &
shell.sh の標準出力が out.log になる。
標準エラー出力は err.log となる。
これより先はプライベートモードに設定されています。閲覧するには許可ユーザーでログインが必要です。
コメント