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

Linuxコマンドは、ターミナルを使用してシステムと対話するのに最適な方法です。ただし、タスクが完了するまで時間がかかる場合があります。これにより、ユーザーはプロセスが完了するまでかなり長い時間待つか、まったく新しいシェルを起動する必要があります。

幸いなことに、いくつかの簡単な方法に従うことで、Linuxコマンドをバックグラウンドで実行できます。

1. コマンドの後にアンパサンドを追加する

Linuxのバックグラウンドコマンドを実行する最も簡単な方法は、コマンドの後にアンパサンド(&)記号を追加することです。たとえば、ターミナルからgeditテキストエディタを起動すると、エディタを閉じるまでシェルを使用できません。ただし、コマンドに&を追加すると、Bashにコマンドをバックグラウンドで実行するように指示し、すぐにシェルを使用できるようになります。

gedit &

同様に、アンパサンド(&)記号の後にスクリプト名を指定することで、Bashスクリプトをバックグラウンドで実行できます。

./script.sh &

2. bgを使用して実行中のコマンドをバックグラウンドに送信する

コマンドを実行して、完了するまで時間がかかることが判明することがあります。Ctrl + Zキーを押してからbgコマンドを使用することで、このようなコマンドを簡単にバックグラウンドに送信できます。Ctrl + Zを押すと実行中のプロセスが停止し、bgによってバックグラウンドに移動します。

ターミナルにjobsと入力することで、すべてのバックグラウンドタスクのリストを表示できます。fgコマンドを使用して、バックグラウンドプロセスをフォアグラウンドに移動します。

複数のジョブがバックグラウンドで実行されている場合、fgの後に%nと入力できます。ここで、nはジョブIDです。たとえば、バックグラウンドジョブ2をフォアグラウンドに移動するには、コマンドは次のようになります。

fg %2

同様に、バックグラウンドジョブを終了するには、killコマンドの後に%とジョブIDを使用します。

kill %2

3. nohupを使用してコマンドをバックグラウンドに送信する

Linuxのnohupコマンドを使用すると、管理者はHUPまたはHang Upシグナルを受け付けないターミナルコマンドを実行できます。nohupを使用して、Linuxで簡単にコマンドをバックグラウンドで実行できます。

以下の例では、単純なNmapポートスキャンをバックグラウンドで実行しています。

nohup sudo nmap -sS --top-ports=15 192.168.1.1/24

nohupの主な利点の1つは、シェルを終了してもコマンドが実行され続けることです。さらに、実行のログファイルが生成されます。現在のディレクトリまたは$HOME内でnohup.outを探してください。

4. システムリダイレクトを使用してバックグラウンドコマンドを実行する

システムリダイレクトを使用して、Linuxでバックグラウンドコマンドを実行することもできます。たとえば、以下のpingコマンドを実行すると、シェルはそれをバックグラウンドで実行し、すぐにターミナルの制御を返します。

ping -c5 8.8.8.8 > output.log 2>&1 &

ここでは、pingコマンドの出力がoutput.logファイルにリダイレクトされます。結果を破棄する場合は、/dev/nullに置き換えることができます。2>&1は、Bashにすべてのエラーを同じファイルにリダイレクトするように指示します。最後の&は、Bashにこのコマンドをバックグラウンドで実行するように指示します。

5. disownを使用してLinuxコマンドをバックグラウンドで実行するように設定する

disownコマンドを使用すると、プロセスを簡単にバックグラウンドで実行できます。まず、&演算子を使用してタスクをバックグラウンドに送信する必要があります。次に、disownと入力してシェルから切り離します。

gedit & disown

disownの大きな利点の1つは、nohupと同様に、シェルを閉じたりログアウトしたりしても、システムがタスクを終了しないことです。

6. tmuxを使用してLinuxコマンドをバックグラウンドで実行する

tmuxは、単一のウィンドウ内で複数のターミナルセッションを実行できる強力なマルチプレクサです。tmuxの使用方法とLinuxでの構成方法を学ぶことは、不慣れな人にとって優れた選択肢です。tmuxを使用すると、Linuxでバックグラウンドコマンドを簡単に実行できます。

tmux new -d 'ping -c 10 8.8.8.8 > output.log'

上記のtmuxコマンドを実行すると、pingコマンドが別のシェルで実行され、バックグラウンドで実行され続けます。この方法を使用して、任意のLinuxプロセスまたはコマンドをバックグラウンドで起動できます。

Linuxコマンドをバックグラウンドに残す

バックグラウンドでコマンドを実行する機能により、管理者はシステム管理の生産性を向上させることができます。タスクをバックグラウンドに送信する方法はいくつかあります。&文字やCtrl + ZなどのBashの機能は便利ですが、シェルを閉じるとシステムはバックグラウンドジョブを終了します。 一方、nohupdisownなどのツールは、ログアウトしたりシェルを終了したりしてもコマンドを実行し続けます。 プログラムを長時間バックグラウンドに放置すると、適切にコーディングされていない場合はゾンビプロセスになる可能性があります。これらのプロセスはシステムを大幅に遅くする可能性があります。そのため、ゾンビプロセスを特定して終了するようにしてください。