コマンド実行時に指定する
nohup
と&(バックグラウンドで実行)
を利用する。
$ nohup sh -c "cd /home/user/test && command.sh > result.txt" &
[1] 20515
nohup: 入力を無視し、出力を `nohup.out' に追記します
コマンドを実行してしまったとき
disown
を利用する。
$ cd /home/user/test && command.sh > result.txt
# Ctrl-Zでジョブを一時停止する
$ jobs # セッションに紐づくジョブ一覧を表示
[1] + suspended command.sh > result.txt
$ bg %1 # 1のジョブをバックグラウンドで走らせる
$ disown %1 # ジョブテーブルから対象のジョブを外す
$ jobs
# 先ほどのコマンドがジョブテーブルから外れていることを確認
ちょっと補足
nohup
を使う場合は、自分のジョブテーブルでコマンドを実行している。
ただ端末のセッションが破棄されるときに、SIGHUPシグナルを無視する。実行しているセッションは同じ。
disown
を使う場合は、現在のセッションと切り離される。