GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコマンドをバックグラウンドで実行する方法

通常、ターミナルでコマンドを実行するときは、コマンドが終了するまで待ってから、別のコマンドを入力する必要があります。これは、フォアグラウンドまたはフォアグラウンドプロセスでのコマンドの実行と呼ばれます。プロセスがフォアグラウンドで実行されると、そのプロセスはシェルを占有し、入力デバイスを使用してプロセスと対話できます。

コマンドの完了に時間がかかり、その間に他のコマンドを実行したい場合はどうなりますか?自由に使えるいくつかのオプションがあります。最も明白で簡単なオプションは、新しいシェルセッションを開始し、その中でコマンドを実行することです。もう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

​​フォアグラウンドプロセスをバックグラウンドに移動#

実行中のフォアグラウンドプロセスをバックグラウンドで移動するには:

  1. Ctrl + Zと入力してプロセスを停止します 。
  2. 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で実行されているプログラムは実行され続けます。

結論#

バックグラウンドでコマンドを実行するには、を含めます コマンドの最後に。

コマンドをバックグラウンドで実行する場合、別のコマンドを実行する前に、コマンドが終了するまで待つ必要はありません。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Linuxエコーコマンド

  2. Linux でユーザー コマンドを制限する方法

  3. Linux:特定のディレクトリでコマンドを実行する方法

  1. LinuxでSuコマンドを使用する方法

  2. バックグラウンドおよびフォアグラウンドでのLinuxコマンドの実行

  3. AからZのLinuxコマンド

  1. Linuxで制限時間(タイムアウト)を使用してコマンドを実行する方法

  2. バックグラウンドでスクリプトを実行する方法 (linux openwrt)?

  3. Linux コマンドを記録するにはどうすればよいですか?