1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

フォアグラウンドでコマンドを実行した後でバックグラウンドジョブに変更する

Posted at

バッチの手動実行など終了まで長時間かかるコマンドを実行する場合、
おそらくnohupでSIGHUPを受け付けないようにしてバックグラウンドジョブとして実行すると思います。
しかし、フォアグラウンドジョブとしてコマンドを実行した後で気付くことがたまにあるので、
コマンド実行後にログアウトしても実行されつづけるように変更する方法をメモしておきます。

1. ctrl-z

これでフォアグラウンドのプロセスは一時停止状態になります。
再開するときにはフォアグラウンドでの再開、もしくはバックグラウンドの再開ができます。

2. jobs -s

停止中のジョブ一覧を表示します。
一時停止したコマンドが表示されているので、その一番左の[n]の数字(=Job番号)をメモしておきます。

[1]+  Stopped                 bin/rake -T

3. bg job番号(PIDも可)

上記でメモしたJob番号を引数に指定してバックグラウンドジョブとして再開します。

4. disown %job番号

現在のシェルのジョブテーブルからジョブを削除します。
こうすることでシェルの終了時(ログアウト時)に投げられるSIGHUPを受け取らないようになります。

hオプションを付与してdisown -hと実行した場合は、シェルのジョブテーブルからジョブを削除せずにSIGHUPを受け付けなくすることができます。
このときはnohupと同様の状態になるため、ログアウトするまでは起動中のシェルでジョブを管理できます。

シンプルですが、以上メモでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?