ターミナルを閉じた後もプロセスを実行し続ける
&
を使ってバックグラウンドでプロセスを実行する場合、ターミナルを閉じるとそのプロセスは終了します。ターミナルを閉じた後もプロセスを実行し続けるには、nohup
コマンドを使用できます。
nohup
(「no hang up」の略)は、ターミナルが閉じられたときにプロセスに送信される SIGHUP(ハングアップ)シグナルをプロセスが受け取らないようにします。
スクリプトを修正して、より長時間実行するようにしましょう。
nano ~/project/long_running.sh
内容を以下のように更新します。
#!/bin/bash
echo "Starting a very long process..."
sleep 60
echo "Process completed" > ~/project/completed.txt
nano を保存して終了します(Ctrl+O、Enter、Ctrl+X)。
では、nohup
を使ってスクリプトを実行しましょう。
nohup ./long_running.sh &
以下のような出力が表示されます。
[1] 1234
nohup: ignoring input and appending output to 'nohup.out'
スクリプトの出力はターミナルに表示されません。代わりに、nohup.out
というファイルにリダイレクトされます。このファイルを確認できます。
cat nohup.out
以下のように表示されるはずです。
Starting a very long process...
この時点でターミナルを閉じても、プロセスは実行し続けます。プロセスが完了すると、nohup.out
と completed.txt
の両方に書き込まれます。
すべてのターミナルでバックグラウンドで実行されているプロセスを表示するには、ps
コマンドを使用します。
ps aux | grep long_running.sh
以下のような表示がされます。
labex 1234 0.0 0.0 8160 736 pts/0 S 12:34 0:00 /bin/bash ./long_running.sh
labex 1235 0.0 0.0 14428 1020 pts/0 S+ 12:34 0:00 grep --color=auto long_running.sh
プロセスが完了するのを待ちます(または必要に応じて終了させます)。
## If you want to terminate the process:
kill %1