Linuxコマンドのバックグラウンド「&」をわかりやすく

Linuxコマンドのバックグラウンド「&」をわかりやすく

シェルプロンプトで、コマンドの後ろに&をつけるとバックグラウンドで実行されます。

重たい処理はバックグラウンドで実行すると、裏で勝手に実行されてシェルプロンプトはすぐに戻ってきます。

jobsコマンド

バックグラウンドで実行されているジョブを確認することができます。

バックグラウンドで実行していない場合はjobsコマンドを実行しても何もありません。

[ec2-user@humidai ~]$ jobs
[ec2-user@humidai ~]$

50秒待機するsleepコマンドをバックグラウンドで実行してみます。

[ec2-user@humidai ~]$ jobs
[ec2-user@humidai ~]$ sleep 50 &
[1] 22586
[ec2-user@humidai ~]$ jobs
[1]+ 実行中 sleep 50 &
[ec2-user@humidai ~]$ jobs
[1]+ 終了 sleep 50
[ec2-user@humidai ~]$ jobs

バックグラウンドで実行した後にjobsコマンドを実行すると、バックグラウンドで実行されているジョブ一覧が表示されました。

[1]がジョブ番号、22586がプロセスになります。

サブシェルをバックグラウンドで実行する

サブシェルをバックグラウンドで実行することも可能です。()のあとに&をつけるだけです。

[ec2-user@humidai ~]$ (sleep 5; echo 'test') &
[1] 23753
[ec2-user@humidai ~]$ test

[1]+ 終了 ( sleep 5; echo 'test' )
[ec2-user@humidai ~]$

ジョブの終了

バックグラウンドジョブの終了は、Enterを押します。

3秒待機するsleepコマンドをバックグラウンドで実行します。

[ec2-user@humidai ~]$ sleep 3 &
[1] 23942
[ec2-user@humidai ~]$
[ec2-user@humidai ~]$
[1]+ 終了 sleep 3
[ec2-user@humidai ~]$

何回かEnterキーを押していたら、終了していたらジョブ終了と出力されます。

ただEnterキーを押すのが面倒です。リアルタイムに終了を通知させたい場合はsetコマンドを使用します。

set -o notify(set -b)コマンドを実行してから、バックグラウンドで実行すると、終了と同時に通知が勝手にされるようになります。

[ec2-user@humidai ~]$ sleep 3 &
[1] 24693
[ec2-user@humidai ~]$ [1]+ 終了 sleep 3
[ec2-user@humidai ~]$

ジョブとプロセスの違い

Linuxでジョブとプロセスという考えがあります。

プロセスはプログラムの実行単位のことで、ジョブはシェル実行単位という感じです。

[ec2-user@humidai ~]$ (sleep 3; echo 'test') &
[1] 355

複数プロセスで1ジョブというイメージです。

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました