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

バックグラウンドコマンド機能

ターミナルでコマンドを実行して、数分、時には数時間もそのままにしておくのは非常に煩わしいことです。その間、ターミナルを再び使用することができません。確かにタブを使うこともできますが、それは不便な解決策であり、作業中に更新を確認したい場合には最適ではありません。ここでは、LinuxでBashコマンドをバックグラウンドで実行するいくつかの方法を紹介します。

関連記事: Linuxでlsofコマンドを使用してオープンファイルをリストする方法

&でコマンドを終了する

コマンドをバックグラウンドに送るには、最後に&を付けるのが簡単な方法です。これにより、バックグラウンドでコマンドを発行し、実行中にターミナルを引き続き使用できます。ただし、注意が必要です。&を使用してもコマンドがあなたから切り離されるわけではなく、単にバックグラウンドに送られるだけです。つまり、ターミナルを使用している間、コマンドがSTDOUTまたはSTDERRに出力したいものはすべて印刷され続けるため、気が散る可能性があります。

2021年01月14日16時21分23秒のスクリーンショット

COMMAND &

ターミナルセッションが閉じられると、コマンドは終了します。また、jobsコマンドを発行して実行中のコマンドの番号を見つけ、killコマンドでそれを終了させることもできます。その構文は次のとおりです。

2021年01月14日16時21分48秒のスクリーンショット

kill %1

&を使用するのは、少しの間何かをバックグラウンドに送る必要がある場合には良いですが、永遠に続くことを期待しないでください。

関連記事: Linuxでddコマンドを使用する方法

コマンドの後に&を付けてから切り離す

&だけでコマンドを実行すると、それはバックに送られ、ターミナルウィンドウが開いている限り実行され続けます。ただし、ターミナルセッションが終了してもこのコマンドを常に実行し続けたい場合は、disownコマンドを使用できます。

この方法を使用するには、まず&を追加します。

COMMAND &

上記のように、&を使用すると、このコマンドはバックグラウンドに送られますが、ユーザーからは切り離されません。ターミナルにjobsと入力することでこれを確認できます。以前に見たように、バックグラウンドで実行中のコマンドが表示されます。

シェルにdisownと入力するだけで、それが実行されます。(再度、jobsコマンドで確認できます。)

2021年01月14日16時26分01秒のスクリーンショット

これでターミナルを閉じて、日常生活を続けることができます。STDOUTまたはSTDERRに出力を続けますが、ターミナルを終了して再度開くと、そこには何も表示されません。topまたはpsコマンドで再度コマンドを見つけ、killコマンドで終了させることができます。

2021年01月14日16時28分42秒のスクリーンショット

関連記事: Linuxでrmコマンドを使用する方法

コマンドの後に/dev/nullを付けて&を使用する

コマンドの後に&を追加すると、コマンドはバックグラウンドに送られますが、その結果、バックグラウンドコマンドはターミナルを使用している間もメッセージを印刷し続けます。これを防ぎたい場合は、コマンドを/dev/nullにリダイレクトすることを検討してください。

2021年01月14日16時31分33秒のスクリーンショット

COMMAND &>/dev/null &

これにより、ターミナルが閉じたときにコマンドが終了するのを防ぐことはできません。ただし、上記のように、実行中のコマンドをユーザーから切り離すためにdisownを使用することが可能です。また、もう実行したくない場合は、上記のいずれかの方法でそれを終了させることもできます。

関連記事: AptおよびApt-Getコマンドの究極のガイド

Nohup、&および/dev/nullを使用する

前述のコマンドとは異なり、nohupを使用すると、コマンドをバックグラウンドで実行し続けることができます。どうやって?nohupはHUP信号(ハングアップ信号)をバイパスし、ターミナルがオフになってもバックグラウンドでコマンドを実行できるようにします。このコマンドを/dev/nullへのリダイレクトと組み合わせることで(nohupがnohup.outファイルを作成しないようにするため)、すべてが1つのコマンドでバックグラウンドに送られます。

nohup COMMAND &>/dev/null &

2021年01月14日16時32分43秒のスクリーンショット

関連記事: OpenSSLを使用してLinuxでSSL証明書を生成する方法

今日のLinuxのほとんどのターミナルプログラムには、バックグラウンドで簡単に実行できる機能が組み込まれています。それに加えて、現代のinitシステム(systemdなど)は、ユーザーがブート時やいつでもサービスとしてプログラムを開始できるようにします。

それでも、Linuxの一部のプログラムは、デーモンとして実行したり、現代のinitシステムと統合したりする機能が欠けています。これは本当に不便ですが、すべての開発者が新しい機能を追加するスキルや時間を持っているわけではないため、理解できます。

幸いなことに、nohupdisownのようなコマンドはまだ現実であり、このようなプログラムをバックグラウンドに移動するギャップを埋めることができます。完璧でも華やかでもありませんが、必要なときに仕事をこなすことができます。

このLinuxの記事を楽しんでいただけたなら、GNOME ShellにGoogleアカウントを接続する方法、Windowsユーザー向けの最高のLinuxディストリビューション、知っておくべきLSコマンドなど、他のLinuxコンテンツもぜひチェックしてください。

関連記事: コマンドラインデータ転送のためのcURLの使用方法とその他