指定したバックグラウンドプロセスをデーモン化する

昔、「ログアウト後もコマンドを実行し続けたい場合」というエントリで"nohup"コマンドの使い方を書いたのですが、nohupし忘れた時はどうすればいいのか、という話。


指定したバックグラウンドプロセスをデーモン化するためにdisownというbashの組み込みコマンドがあります。

#!/bin/sh
while :;
do
  sleep 5
done

ためしに上記のようなスクリプトを用意して、"&"付で実行します。

$ sh test.sh &
[1] 2692
$ jobs
[1]+  実行中               sh test.sh &

次に、disownコマンドを実行します。引数には"%"+ジョブ番号を指定します。(上記例だとジョブ番号は"1")

$ disown %1
$ jobs
$ 

この通り。psコマンドの結果は↓

$ ps -edf
・・・省略・・・
nami      2692  1708  0 02:25 pts/0    00:00:00 sh test.sh
nami      2739  2692  0 02:28 pts/0    00:00:00 sleep 5

これでターミナルを終了(ログアウト)させても大丈夫です。