(Linux) &を付けてコマンドをバックグラウンド実行する

(Linux) &を付けてコマンドをバックグラウンド実行する

 

 

先日、phpからシェルコマンドを実行するソース内で、コマンドの最後に「&」が付いているのを見かけ、何だこの&は?と思ったので、シェルコマンドの最後に&(アンド)をつけると何が起こるのかを調べてみた。

 

バックグラウンドでプログラムを実行する(&アンド)

結論から言うと、コマンドの最後に&を付けて実行すると、バックグラウンドでプログラム(コマンド)が実行される

長い処理や、複数の処理を並列に実行したい場合に便利な使い方となる。
実際に、筆者の場合も、phpソース内で、for文で繰り返しシェルコマンドを実行する際に&を付けていた。

 

コマンドの最後の&の役割
  • コマンドの最後に&を付けて実行すると、バックグラウンドでプログラム(コマンド)が実行される。
  • 長い処理や、複数の処理を並列に実行したい場合に便利。

使い方

Command &

Command は、任意のプログラム(コマンド等)。

 

バックグラウンドでプログラムを実行してみる例

実際にバックグラウンドでプログラムを実行して挙動を確かめてみる。

挙動の確認に使用するプログラム(コマンド)は、sleepコマンドを使用する。sleepコマンドは、引数に指定した秒数分、次のプログラムの実行を待機するコマンドだ。待機している間は、フォアグラウンドでコマンドを実行することができない。

10秒待機、その間はフォアグラウンドでコマンドを実行できない
sleep 10

 

しかし、上記sleepコマンドの最後に&を付けて、sleepコマンドの実行をバックグラウンドにすることで、フォアグラウンドでは、新たにプログラムの実行を受け付けることが可能となる。

# sleep 10 &

[1] 500000

# ← 次のコマンドを受け付ける状態になっている

 

2個目、3個目と立て続けにプログラムを実行してみても同じ結果となる。

# sleep 10 &

[2] 50826

# sleep 10 &

[3] 50827

# ← 次のコマンドを受け付ける状態になっている

 

バックグラウンドのプログラムが終了した場合、エンターキーを押したタイミングでシェルが教えてくれる。

# sleepが終わった頃あいでエンターキーを押す

#

[1]   Done     sleep 10 ← プログラムの終了の通知

[2]   Done     sleep 10 ← プログラムの終了の通知

 

 

バックグラウンドで実行中のプログラムを確認する:jobsコマンド

バックグラウンドで実行中のプログラムは、「jobs」コマンドで確認できる。

# jobs

[3]-  Running                 sleep 10 &

[4]+  Running                 sleep 10 &

 

 

参考

■sleep

https://www.atmarkit.co.jp/ait/articles/1611/21/news021.html

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。