最近知ったTips. 何でこんなの今まで知らなかったのだろうかってレベルなんだけど. バックグランド実行を忘れてしまっていた時の対処法.

活躍するシーン

例えば,今しがた自分がやってしまった例.

作業中にちょっとPDFのドキュメントを参照しようとしてevinceコマンドでPDFを開いた. ただしうっかりバックグラウンド実行を忘れてしまっていて,制御が戻ってこなくなってしまった. PDFを参照しながらターミナル上で作業を続けたかったのに,制御が戻ってこないので出来ない!

実行手順

具体的な実行手順としては

  1. C-z(SIGSTP)で停止させる
  2. bgコマンドで再開させる

という拍子抜けするくらい単純な操作.

何が起こってるか

こういう問題が起こるのは,ターミナル上で実行したジョブが終了しないのでターミナルに制御が戻ってこなくなってしまうのが原因. C-z(Ctrl押しながらz)を実行すると,フォアグラウンドで実行されているジョブへSIGSTPシグナルが送られるため,ジョブのプロセスがsuspend状態になり制御が戻ってくる. そこで改めてbgコマンドを使ってバックグラウンドでジョブを再開させてやれば良い.

ちなみに,そのターミナルで複数のジョブが動作している場合にはjobsコマンドで一覧を確認することが出来る. fg/bgコマンドはその際に表示されるプロセス名やジョブ番号を使って明示的に指定してやることが可能. 指定するときには頭に%をつけてやる必要あり. zshならこれらも勝手に補完してくれる模様.