nohupの使い方

2025/01/26
nohupコマンドは,よくアンパサンド“&”と併用して,時間がかかる処理・コマンドをバックグラウンドで実行するのに使います.
nohupコマンド自体は,標準出力をカレントディレクトリの“nohup.out”へ書き込むコマンドです.

以下が実行例.シェルスクリプト“./ts2mp4-1920_07.sh”を“test-1/”という引数を付けて実行しています.
実行すると,ジョブ番号“1”とプロセスID“297116”が表示されています.これら数値は当然その時々で変わります.
ushi@server: ~/long-process$ nohup ./ts2mp4-1920_07.sh test-1/ &
[1] 297116
ushi@server: ~/long-process$ nohup: 入力を無視し、出力を 'nohup.out' に追記します

ushi@server: ~/long-process$
実行している処理(ジョブ)が何か確認したいときはjobsコマンドを使います.
ushi@server: ~/long-process$ jobs
[1]+  実行中               nohup ./ts2mp4-1920_07.sh test-1/ & (wd: /home/ushi/long-process)
ushi@server: ~/long-process$

もし,実行してから処理を中止したいときは,killコマンドを使います.
先に表示された,ジョブ番号かプロセスIDを指定して止めます.
実行した端末が開いたままならば,ジョブ番号を入力した方が楽です.
ジョブ番号が“[1]”ならば“kill %1”と入力すれば処理を中止できます.
ushi@server: ~/long-process$ kill %1
ushi@server: ~/long-process$ jobs
[1]+  Terminated              nohup ./ts2mp4-1920_07.sh test-1/  (wd: /home/ushi/long-process)
ushi@server: ~/long-process$ 
一度端末を閉じてしまって,ジョブ番号がわからなくなった時は,プロセスIDを検索してからkillします.
ushi@server:~$ ps -ef | grep ts2mp4
ushi     297805       1  0  1月25 ?      00:00:00 /bin/sh ./ts2mp4-1920_07.sh test-1/
ushi     301436  301017  0 00:47 pts/4    00:00:00 grep ts2mp4
ushi@server:~$ kill 297805 
強制終了しないとダメな場合は,さらに“-9”オプションを付けます.
ushi@server:~$ kill -9 297805