UNIX/基礎知識/バックグラウンド、フォアグラウンド
ジョブには、 フォアグラウンドジョブとバックグラウンドジョブの二つがあります。 ジョブについては jobs のほうを参照してください。
フォアグラウンドジョブではそのジョブが終了するまで次のジョブが実行できません。 バックグラウンドジョブではその終了がなくても次のジョブを実行できます。 そのジョブは裏で実行されているように見えます。
バックグラウンドジョブは、コマンド名の後に & を付けることで実行します。 emacsならば
% emacs &
のようにします。 フォアグラウンドジョブは、普通に
% emacs
のようにします。
フォアグラウンドジョブでは、
Ctrl-c
を入力することで処理を中止させることができます。 また、
Ctrl-z
を入力することで処理を中断させることができます。時間のかかるプログラムを実行しているときはもちろんのこと、例えば vi で文書を編集していて一旦コマンドラインに戻りたい時などにも使用できます。
中断されたジョブは、直後ならば
% fg
のようにしてfg コマンドを使うことでフォアグラウンドジョブとして再開できます。
% fg %[job_id]
のようにして job_id を指定することもできます。job_id は jobs コマンドで調べられます。
一方、ジョブを中断後
% bg
とすると、バックグラウンドジョブとして再開できます。 emacs 起動時に & を付け忘れたときに、一度 Ctrl-z で中断し、bg で & を付けたように復帰させるのに使用したりできます。こちらも
% bg %[job_id]
のようにして job_id を指定することもできます。
バックグラウンドで実行されたジョブを中止させるには kill コマンドを使用します。
あるプログラムが終了後、続いて別のプログラムを実行したい場合は、例えば
% cp -a source target; cp -a source2 target2
のようにするわけですが、
% cp -a source target
をとりあえず実行してしまった時に、上記の状況にしたい場合は、Ctrl-z で一度中断し
% fg; cp -a source2 target2
のようにして追加実行させられます。ここでまたさらに追加したくなった場合は、Ctrl-z で先頭ジョブを中断、2番ジョブが実行されるのでそれも Ctrl-z で中断、
% fg %1; fg %2; cp -a source3 target3
のようになってしまうと思われます。