Linux端末でコマンドを実行する通常のスタイルは、単にコマンドを実行して、正常に終了するのを待つことです。コマンドが終了すると、他のコマンドの実行に進むことができます。これは、フォアグラウンドでコマンドを実行することとして知られているものです。言葉が示すように、端末でコマンドの出力を視覚的に確認できます。
ただし、フォアグラウンドでコマンドを実行すると、一連の課題が発生する場合があります。コマンドの終了に時間がかかりすぎて貴重な時間を浪費する可能性があります。また、コマンドがシェルセッションに完全に接続されたままになる可能性があります。
このような場合、バックグラウンドでコマンドを実行するのが最善の策です。フォアグラウンドで他のコマンドを同時に実行するときに、コマンドをバックグラウンドに送信できます。これにより、端末での作業効率が向上し、時間を節約できます。
このガイドでは、Linuxシェルコマンドまたはスクリプトをバックグラウンドで実行する方法に焦点を当てています。
(&)記号を使用してバックグラウンドでシェルコマンドを実行する
コマンドまたはスクリプトをバックグラウンドで実行するには、図のように最後にアンパサンド記号(&)を付けて終了します。
$コマンド&
注:アンパサンド記号を使用してコマンドを終了しても、コマンドは切り離されません。使用している現在のシェルのバックグラウンドに送信するだけで、コマンドは出力をSTDOUTまたはSTDERRに出力します。これにより、端末で他のコマンドを実行できなくなります。
より良いアプローチは、コマンドを/ dev / nullにリダイレクトし、後で示されているように最後にアンパサンド記号を追加することです
$コマンド&> / dev / null&
コマンドがバックグラウンドに送信されたことを確認するには、jobsコマンドを実行します。
バックグラウンドプロセスを終了するには、次のように、killコマンドを実行してからプロセスのPIDを実行します。 -9オプションは、プロセスをすぐに終了します。
$ kill -9 138314
nohupコマンドを使用してシェルコマンドまたはスクリプトをバックグラウンドで実行する
バックグラウンドでコマンドを実行するもう1つの方法は、nohupコマンドを使用することです。 nohupコマンドは、ハングアップなしの略で、シェルを終了した後もプロセスを実行し続けるコマンドです。
これは、プロセスがSIGHUP(Signal Hang UP)シグナルを受信するのをブロックすることによって行われます。これは、通常、プロセスが端末を出るときにプロセスに送信されるシグナルです。
コマンドまたはスクリプトをバックグラウンドで送信して実行し続けるには、次の構文を使用します。
$ nohupコマンド&> / dev / null&
$ nohup shell-script.sh&> / dev / null&
たとえば、
$ nohup ping google.com &>/dev/null &
ここでも、次のコマンドを使用して、コマンドがバックグラウンドで実行されていることを確認できます。
$ jobs
結論
このガイドでは、コマンドまたはシェルスクリプトをバックグラウンドで実行する2つの方法について説明しました。 &signとnohupコマンドを使用してバックグラウンドでコマンドを実行する方法を見てきました。
また読む :LinuxのZipおよびUnzipコマンドと例