時間がかかる UNIX シェル スクリプトやコマンドを実行する場合、バックグラウンド ジョブとして実行できます。
この記事では、ジョブをバックグラウンドで実行する方法、ジョブをフォアグラウンドに移動する方法、すべてのバックグラウンド ジョブを表示する方法、およびバックグラウンド ジョブを強制終了する方法を確認します。
1.バックグラウンド ジョブの実行
コマンドにアンパサンド ( &) を追加すると、バックグラウンドでジョブが実行されます。
たとえば、実行に時間がかかりそうな検索コマンドを実行する場合、以下のようにバックグラウンドで実行できます。次の例は、過去 24 時間以内に変更されたルート ファイル システムの下のすべてのファイルを検索します。
# find / -ctime -1 > /tmp/changed-file-list.txt &
2. CTRL-Z と bg コマンドを使用して現在のフォアグラウンド ジョブをバックグラウンドに送信
以下で説明するように、すでに実行中のフォアグラウンド ジョブをバックグラウンドに送信できます。
- 「CTRL+Z」を押すと、現在のフォアグラウンド ジョブが中断されます。
- bg を実行して、そのコマンドをバックグラウンドで実行します。
たとえば、バックグラウンドでジョブを実行するのを忘れた場合、現在のジョブを強制終了して新しいバックグラウンド ジョブを開始する必要はありません。代わりに、現在のジョブを一時停止し、以下に示すようにバックグラウンドに置きます。
# find / -ctime -1 > /tmp/changed-file-list.txt # [CTRL-Z] [2]+ Stopped find / -ctime -1 > /tmp/changed-file-list.txt # bg
3.ジョブ コマンドを使用してすべてのバックグラウンド ジョブを表示
コマンド jobs でバックグラウンド ジョブを一覧表示できます。 . jobs コマンドのサンプル出力は
# jobs [1] Running bash download-file.sh & [2]- Running evolution & [3]+ Done nautilus .
4. fg コマンドを使用してジョブをバックグラウンドからフォアグラウンドに移す
fg コマンドを使用して、バックグラウンド ジョブをフォアグラウンドに移動できます .引数なしで実行すると、最新のバックグラウンド ジョブがフォアグラウンドになります。
# fg
複数のバックグラウンド グラウンド ジョブがあり、特定のジョブをフォアグラウンドに移動したい場合は、jobs コマンドを実行すると、ジョブ ID とコマンドが表示されます。
次の例では、fg %1 はジョブ #1 (つまり、download-file.sh) をフォアグラウンドに移動します。
# jobs [1] Running bash download-file.sh & [2]- Running evolution & [3]+ Done nautilus . # fg %1
5. kill % を使用して特定のバックグラウンド ジョブを強制終了します
特定のバックグラウンド ジョブの使用を強制終了する場合は、%job-number を強制終了します。たとえば、ジョブ 2 を強制終了するには
# kill %2
フォアグラウンド ジョブを強制終了するには、以前の記事「プロセスを強制終了する 4 つの方法」で指定されている方法のいずれかを使用します — kill、killall、pkill、xkill。