【&】Linuxコマンド_プログラムをバックグラウンドで実行する

アプリ系(GUI上などで動作するプログラムなど)は実行してもすぐには終了せず、プログラムを完了させる、もしくは停止・終了させるまでは起動したままとなります。

このようにプログラムが起動したままの状態だと、別のプログラムを実行する際、待ち状態となり、コマンドを入力することができません。

このような場合、バックグラウンドでプログラムを実行する「&」&を最後につけてコマンドを実行することで、上記のようなアプリ系などのプログラムを実行しながらの別のコマンド・プログラムを実行することができます。




↓↓↓ITエンジニアのおすすめ学習・開発環境の詳細へ↓↓↓

「&(アンパサント)」の使い方(Linux)

基本的なバックグラウンドでの実行は、バックグラウンドで実行したいコマンドの後ろに「&(アンパサント)」をつけて実行します。
以下では「sleep」コマンドを実行し5秒間プロンプトが表示されるまで遅延させます。

$sleep 5
$  ←5秒後にプロンプトが戻る

sleepコマンドを実行中は他のコマンドが実行できずないのでバックグラウンドを実行するようにします。
sleepコマンドで最後に「&」をつけることでバックグラウンドで処理を実施します。

その間、dateコマンドを実行できることができ、5秒後にsleepコマンドが終了したことも確認できます。

$sleep 5 &
[1] 1894705
$date
2022年  7月 10日 日曜日 12:59:45 JST
$
[1]+  終了                  sleep 5

連続したコマンドをバックグラウンドで実行

例えば「sleep」コマンドを実行した際、以下のように、「date」コマンドを実施し、3秒後に再度「date」コマンドを実行するようにします。
この時、コマンドが実行されるまで、他のコマンドを実行すると、現在実行中のコマンドがキャンセルされます。

$date; sleep 3; date
2022年  7月 10日 日曜日 12:51:46 JST
2022年  7月 10日 日曜日 12:51:49 JST

複数のコマンド処理をバクグラウンドで実行する場合は、いくつかのやり方があります。
以下では複数のコマンドをバックグラウンドで実行するやり方をまとめました。

複数コマンドを()カッコで囲む

()カッコで複数コマンドを実行した例となります。

$ (date; sleep 5; date) &
[1] 1896935
$ 2022年  7月 10日 日曜日 18:50:11 JST
2022年  7月 10日 日曜日 18:50:16 JST

[1]+  終了                  ( date; sleep 5; date )

複数コマンドを{}カッコで囲む②

{}カッコで複数コマンドを実行した例となります。

$ { date; sleep 5; date; } &
[1] 1896951
$ 2022年  7月 10日 日曜日 18:52:28 JST
2022年  7月 10日 日曜日 18:52:33 JST

[1]+  終了                  { date; sleep 5; date; }

複数コマンドを改行をつけて{}カッコで囲む

改行と{}カッコを利用して複数コマンドを実行した例となります。

$ {
> date;
> sleep 5;
> date;
> } &
[1] 1896994
$ 2022年  7月 10日 日曜日 18:58:36 JST
2022年  7月 10日 日曜日 18:58:41 JST

[1]+  終了                  { date; sleep 5; date; }

shellコマンドで非同期実行で複数コマンドを実行する

以下はシェルコマンドを実行し、さらに「-c」オプションで複数コマンドを一まとめにして実行する。

$ sh -c 'date; sleep 5; date' &
[1] 1897008
$ 2022年  7月 10日 日曜日 19:00:13 JST
2022年  7月 10日 日曜日 19:00:18 JST

[1]+  終了                  sh -c 'date; sleep 5; date'

シェルで実行する

シェルの実行ファイルをあらかじめ作成して、複数コマンドを実行します。
※test.sh

#!/bin/sh

date
sleep 5
date

ファイルを実行する際は以下のようの「sh」コマンドを実行します。

$ sh test.sh &
[1] 1897082
$ 2022年  7月 10日 日曜日 19:04:56 JST
2022年  7月 10日 日曜日 19:05:01 JST

[1]+  終了                  sh test.sh

Linuxコマンドをバックグラウンドで実行する方法は以上となります。

エンジニアのオンライン学習

エンジニアにおすすめのオンライン教材比較
ITエンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!