通常、ターミナルでコマンドを実行するときは、コマンドが終了するまで待ってから、別のコマンドを入力する必要があります。これは、フォアグラウンドまたはフォアグラウンドプロセスでのコマンドの実行と呼ばれます。プロセスがフォアグラウンドで実行されると、そのプロセスはシェルを占有し、入力デバイスを使用してプロセスと対話できます。
コマンドの完了に時間がかかり、その間に他のコマンドを実行したい場合はどうなりますか?自由に使えるいくつかのオプションがあります。最も明白で簡単なオプションは、新しいシェルセッションを開始し、その中でコマンドを実行することです。もう1つのオプションは、コマンドをバックグラウンドで実行することです。
バックグラウンドプロセスは、端末から開始され、ユーザーの操作なしにバックグラウンドで実行されるプロセス/コマンドです。
この記事では、バックグラウンドプロセスがLinuxであることについて説明します。バックグラウンドでコマンドを開始する方法と、シェルセッションを閉じた後もプロセスを実行し続ける方法を説明します。
バックグラウンドでLinuxコマンドを実行する#
バックグラウンドでコマンドを実行するには、アンパサンド記号(&
)を追加します )コマンドの最後:
command &
シェルジョブID(角かっこで囲まれている)とプロセスIDが端末に出力されます:
[1] 25177
複数のプロセスを同時にバックグラウンドで実行することができます。
バックグラウンドプロセスは、コマンドを呼び出した端末にメッセージを書き込み続けます。 stdout
を抑制するには およびstderr
メッセージは次の構文を使用します:
command > /dev/null 2>&1 &
> / dev / null 2>&1
stdout
をリダイレクトすることを意味します / dev / null
へ およびstderr
stdout
へ 。
jobs
を使用する 現在のシェルセッションで停止したすべてのバックグラウンドジョブのステータスを表示するユーティリティ:
jobs -l
出力には、ジョブ番号、プロセスID、ジョブの状態、およびジョブを開始したコマンドが含まれます。
[1]+ 25177 Running ping google.com &
バックグラウンドプロセスをフォアグラウンドにするには、 fg
を使用します コマンド:
fg
複数のバックグラウンドジョブがある場合は、%
を含めます コマンド後のジョブID:
fg %1
バックグラウンドプロセスを終了するには、 kill
を使用します コマンドの後にプロセスIDが続く:
kill -9 25177
フォアグラウンドプロセスをバックグラウンドに移動#
実行中のフォアグラウンドプロセスをバックグラウンドで移動するには:
-
Ctrl + Z
と入力してプロセスを停止します 。 -
bg
と入力して、停止したプロセスをバックグラウンドに移動します 。
シェルが終了した後もバックグラウンドプロセスを実行し続ける#
接続が切断されるか、シェルセッションからログアウトすると、バックグラウンドプロセスが終了します。インタラクティブシェルセッションが終了した後もプロセスを実行し続けるには、いくつかの方法があります。
1つの方法は、 disown
を使用して、シェルのジョブコントロールからジョブを削除することです。 シェルビルトイン:
disown
複数のバックグラウンドジョブがある場合は、%
を含めます コマンド後のジョブID:
disown %1
jobs -l </ code>を使用して、アクティブなジョブのテーブルからジョブが削除されていることを確認します 指図。所有されていないプロセスを含むすべての実行中のプロセスを一覧表示するには、
ps aux
を使用します コマンド。
シェルの終了後にプロセスを実行し続ける別の方法は、 nohup
を使用することです。 。
nohup
コマンドは、引数として指定された別のプログラムを実行し、すべての SIGHUP
を無視します (ハングアップ)信号。 SIGHUP
制御端末が閉じているときにプロセスに送信される信号です。
nohup
を使用してバックグラウンドでコマンドを実行するには コマンド、次のように入力します:
nohup command &
コマンド出力はnohup.out
にリダイレクトされます ファイル。
nohup: ignoring input and appending output to 'nohup.out'
ログアウトするか、ターミナルを閉じても、プロセスは終了しません。
代替案#
同時に複数のインタラクティブセッションを行うことができるプログラムはたくさんあります。
Screenor GNU Screenは、スクリーンセッションを開始し、そのセッション内で任意の数のウィンドウ(仮想端末)を開くことができるターミナルマルチプレクサプログラムです。 Screenで実行されているプロセスは、切断されてもウィンドウが表示されていない場合でも実行を継続します。
Tmux#
TmuxisはGNUscreenの最新の代替手段です。 Tmuxを使用すると、セッションを作成して、そのセッション内で複数のウィンドウを開くこともできます。 Tmuxセッションは永続的です。つまり、ターミナルを閉じても、Tmuxで実行されているプログラムは実行され続けます。
結論#
バックグラウンドでコマンドを実行するには、&
を含めます コマンドの最後に。
コマンドをバックグラウンドで実行する場合、別のコマンドを実行する前に、コマンドが終了するまで待つ必要はありません。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。