HOWTO · Bash

Bash でバックグラウンド プロセスを実行する

このチュートリアルでは、Bash でバックグラウンドで実行されるコマンドを作成する方法について説明します。 また、トピックをより簡単にするために、必要な例と説明を使用してトピックについて説明します。

このページの内容

ターミナルでコマンドを実行するときは、コマンドの実行が完了するまで待つ必要があります。 これをフォアグラウンド プロセスと呼びます。

ただし、一部の高度なプログラムはバックグラウンドで実行する必要があります。 Bash スクリプトでは、コマンドをバックグラウンドで実行する簡単な方法があります。

バックグラウンド プロセスの興味深い点は、コマンドの実行が終了するまで待つ必要がないことです。 別のコマンドを並行して実行できます。

ただし、×ボタンをクリックしただけではバックグラウンド処理を終了することはできません。 バックグラウンド プロセスを終了するには、いくつかのコマンドを使用する必要があります。

この記事では、バックグラウンドで実行されるコマンドを作成する方法について説明します。 また、トピックをより簡単にするために、必要な例と説明を使用してトピックについて説明します。

最初にバックグラウンド プロセスを作成する方法を学び、次に既存のプロセスを強制終了する方法を確認します。

Bash で & を使用してバックグラウンド プロセスを作成する

バックグラウンド プロセスの作成は、Bash スクリプトで非常に簡単です。 コマンドの最後にアンパサンド記号 & を含めるだけです。

コマンドをバックグラウンドで実行するための一般的な構文は次のとおりです。

YOUR COMMAND &

以下の例では、Bash スクリプトをバックグラウンド プロセスとして実行します。 コードは次のようになります。

./example.sh &

上記のコードを実行すると、次の出力が得られます。

[1] 20

ここでは、3 番目の括弧で囲まれたプロセス番号が表示されます。

プロセスがジョブを完了すると、次のように通知されます。

[1]+  Done                    ./example.sh

Bash でバックグラウンド プロセスを強制終了する

バックグラウンド プロセスを強制終了するには、次の手順を実行するだけです。 プロセス ID を忘れた場合は、以下のコマンドを使用して実行中のプロセスを見つけることができます。

jobs -l

これにより、実行中のプロセスのリストが出力されます。

[1]+ 25177 Running                 ./example.sh &

リストからプロセス ID を見つけ、これを使用して、次のコマンドを使用してプロセスを強制終了できます。

kill %1

プロセスを強制終了するための一般的な構文は次のとおりです。

kill %ProcessID

Bash で disown を使用して現在のジョブを実行し続ける

ターミナルが閉じられていても、現在のジョブをバックグラウンドで実行し続けることができます。 この目的のために、disown という名前のコマンドを使用します。

現在のジョブを常にバックグラウンドで実行し続けるには、次のコマンド例に従います。

disown -h %3

ターミナルが閉じられていても、ID 3 のプロセスは存続します。 ここで、-h はプロセスを存続させるためのオプションです。

このコマンドの一般的な構文は次のとおりです。

disown -h %ProcessID

バックグラウンド プロセスがターミナルにメッセージを出力し続けるのを防ぐ

バックグラウンド プロセスがターミナル ウィンドウにメッセージを出力しないようにするには、次の構文に従います。

Your_Command 2>/dev/null &

これにより、端末ウィンドウでのメッセージの出力が停止します。

nohup を使用してコマンドをバックグラウンドで実行し続ける

ターミナルが閉じられていても、プロセスをバックグラウンドで実行し続けたい場合は、nohup コマンドを使用する必要があります。 このコマンドは、引数として指定された他のプログラムを実行し、すべての SIGHUP シグナルを無視します。

端末を閉じると、SIGHUP シグナルが送信され、制御端末で実行中のすべてのプロセスが閉じられます。 このコマンドは SIGHUP コマンドを無視するため、nohup コマンドによって実行されるプロセスは、強制終了されるまで常に生き続けます。

このコマンドには & を含める必要があります。 以下の例に従うことができます。

nohup ./MyScript.sh &

このコマンドは、バックグラウンド プロセスを実行し、その出力を nohup.out ファイルに書き込みます。

Bash で実行中のフォアグラウンド プロセスをバックグラウンド プロセスに変換する

フォアグラウンド プロセスをバックグラウンドに転送するには、次の 2つの手順に従う必要があります。

  1. まず、Ctrl+Z を押して対象のプロセスを停止する必要があります。
  2. コマンド bg を使用して、停止したプロセスをバックグラウンドに移動します。 以下の構文に従うことができます。
bg %ProcessID

この記事で使用するコードはすべて Bash で記述されています。 Linux シェル環境でのみ動作します。