Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

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

この記事では、Linux(Ubuntuを含む)のシェルでコマンドをバックグラウンドで実行する方法を解説します。SSH経由でリモート接続して作業する際に特に役立つテクニックです。

SSH経由でリモートのコンピュータに接続し、時間のかかるタスクを実行したい場面を想像してみてください。

通常、タスクの実行中は接続を維持し、ターミナルウィンドウを開いたままにしておく必要があります。しかし、別の作業のためにウィンドウを閉じたい場合や、不安定なインターネット接続で接続が頻繁に切れてしまう環境では、これが大きな負担になります。

ウィンドウを閉じたり接続が切断されたりすると、リモートコンピュータ上のコマンド実行が停止してしまう可能性があります。

コマンドをバックグラウンドで実行すれば、この問題を回避できます。接続やセッションの状態にかかわらず、コマンドは実行され続けます。

また、スクリプト内でコマンドの完了を待たずに次の処理へ進みたい場合や、後続の処理でその出力を必要としない場合にも、バックグラウンド実行は有効です。

「&」を使ってコマンドをバックグラウンドで実行する

Linuxでコマンドをバックグラウンドで実行するのはとても簡単です。コマンドの末尾に「&」を付けるだけです。

your_command_here &

例えば、以下のコマンドは2つのファイルをzip圧縮します。バックグラウンドで実行されるため、完了を待たずに他のコマンドを実行できます。

zip archive.zip file1 file2 &

簡単ですね。出力は次のようになります。

[1] 3001

これは、バックグラウンドで実行中のコマンドのジョブ番号(この例では[1])とプロセスID(この例では3001)を示しています。

ジョブが完了(または失敗)すると、そのステータスが出力されます。

[1]  + done       zip archive.zip file1 file2

バックグラウンドジョブの出力を非表示にする

バックグラウンドで実行中でも、コマンドの出力はターミナルに表示され続けます。

他の作業の妨げになるなど、出力を非表示にしたい場合は、標準のリダイレクションを使って出力を抑制できます。

your_command > /dev/null 2>&1 &
  • 上記の「>」は、コマンドのSTDOUT(標準出力)を/dev/nullにリダイレクトします。
  • 2>&1」により、コマンドのSTDERROR(標準エラー出力)がSTDOUTにリダイレクトされ、結果としてSTDERRも/dev/nullに送られます。
  • /dev/nullは、出力がどこにも行かないことを意味します。つまり、出力は完全に消去され、表示されません。

実行中のバックグラウンドジョブを一覧表示する

現在実行中のバックグラウンドジョブを一覧表示するには、jobsコマンドを使用します。

jobs -l

実行中のバックグラウンドジョブのリストが表示され、各エントリは次のような形式になります。

[1]  + 3601 running    ping 8.8.8.8 > /dev/null 2>&1

上記の例では、コマンド「ping 8.8.8.8 > /dev/null 2>&1」がバックグラウンドで実行されており、ジョブIDは1、プロセスIDは3601であることがわかります。

バックグラウンドジョブを停止する

killコマンドを使用すると、タスクを停止できます。

kill 3601

バックグラウンドジョブのプロセスIDを指定すると、そのタスクが停止(終了)されます。

セッションが切断されてもバックグラウンドジョブを実行し続ける

ここがおそらく最も便利なポイントです。

ウィンドウを閉じたり、接続が切れたり、セッションが何らかの理由で中断されたりしてもコマンドを実行し続けたい場合は、disownコマンドを使ってバックグラウンドジョブを切り離す必要があります。

disown %1

上記の例では、ジョブIDが1のバックグラウンドジョブが切り離されます。現在のシェルから切断され、完了するか、エラーが発生するか、killコマンドで終了されるまで実行され続けます。

切り離した(disownした)タスクを追跡する必要がある場合は、実行中のすべてのプロセスを一覧表示する方法を解説した記事も参考にしてください。

実行中のコマンドをバックグラウンドに移動する

すでに実行中のコマンドをバックグラウンドに移動するには、まずコマンドを一時停止し、その後バックグラウンドへ移行します。

コマンドの実行中に「CTRL + Z」を押すと、次のような表示が現れます。

suspended  command_name

これは、コマンドが一時停止されたことを示しています。

次に、bgコマンドを入力すると、コマンドがバックグラウンドで実行を再開します。

bg

次のような表示が出ます。

continued  command_name

これで、コマンドがバックグラウンドで実行されていることが確認できます。

  1. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行

  2. YouTubeをバックグラウンドで再生する方法|Androidで無料で実現する2つのテクニック

    YouTubeは今や説明不要の定番サービスとなり、子供から大人まで幅広い世代に利用されています。もはやテレビに取って代わる存在だと言っても過言ではありません。 映画やドキュメンタリー、お笑い番組の視聴はもちろん、音楽ストリーミングとして活用している人も多いのではないでしょうか。 ところが、AndroidスマホでYouTubeの音楽を聴きながら他の作業をしたいとき、思わぬ壁にぶつかります。PCでは画面を切り替えても音声が流れ続けますが、Androidではアプリを切り替えたり画面を消したりすると再生が止まってしまうのです。 この問題を解決するには、有料プラン「YouTube Premium」のバッ