0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Linux】ジョブについて

Posted at

ジョブって何?

ジョブとは、シェル上で実行したコマンドやプログラム等の処理の単位の事を指します。
例えば、lsコマンドを実行した場合に1ジョブが生成されます。ll / | grep "tmp"とターミナル上で実行した場合にプロセスは2つ生成されますが、ジョブは1つ生成されます。(コマンド毎にプロセスが生成されている。)
基本的には、ターミナル上で入力した一行のコマンド等が1つのジョブとなります。

また、シェル単位でジョブ番号は管理されております。

ジョブの確認

jobsコマンドを使用する事で、ジョブの一覧(実行/停止等)を表示する事が出来ます。
ジョブを稼働させていない場合は、特に何も表示されません。

ジョブ使用無
[root@localhost ~]# jobs
[root@localhost ~]#

ジョブの状態を確認したいので、sleepコマンドを実行後にCtrl + zで一時停止させます。
再度jobsコマンドを実行すると、停止となっているジョブが表示されました。
先頭に記載されている[1]や[2]は、ジョブ番号となっております。また、その横の+は現在のジョブはカレントジョブを表しており、-の場合はその前のジョブを表しています。

ジョブを一時停止
[root@localhost ~]# sleep 100
^Z
[1]+  停止                  sleep 100
[root@localhost ~]# jobs
[1]+  停止                  sleep 100


[root@localhost ~]# sleep 1000
^Z
[2]+  停止                  sleep 1000
[root@localhost ~]# jobs
[1]-  停止                  sleep 100
[2]+  停止                  sleep 1000

フォアグラウンドとバックグラウンド

ジョブには、フォアグラウンドバックグラウンドがあります。
フォアグラウンドはユーザの操作対象となっているジョブです。バックグラウンドはユーザの操作対象ではないが、処理は継続しているジョブとなります。

コンソール上でコマンドを実行すると、フォアグラウンドで処理されます。
ジョブが終了するまで、他のコマンドは動作出来ません。
処理を継続しつつ、他の作業を行いたい場合等にバックグラウンドでジョブを動作させます。

先程、一時停止したsleepコマンドをフォアグラウンドで動作させます。
ジョブをフォアグラウンドで実行する場合は、fgコマンドを使用します。
構文はfg %[ジョブ番号]となります。なお、ジョブ番号を省略した場合はカレントジョブがフォアグラウンドになります。

フォアグラウンドに切り替え
[root@localhost ~]# jobs
[1]-  停止                  sleep 100
[2]+  停止                  sleep 1000
[root@localhost ~]# fg %1
sleep 100

お次は、バックグラウンドでジョブを動作させます。
ジョブをバックグラウンドで実行する場合は、bgコマンドを使用します。
構文はbg %[ジョブ番号]となります。なお、ジョブ番号を省略した場合はカレントジョブがバックグラウンドになります。

sleep 10;echo "10秒経過" >> test.txt"と記載したスクリプトを作成し、バックグラウンドで動作させます。

バックグラウンドに切り替え
[root@localhost ~]# bash test.sh
^Z
[1]+  停止                  bash test.sh
[root@localhost ~]# jobs
[1]+  停止                  bash test.sh
[root@localhost ~]# bg
[1]+ bash test.sh &
[root@localhost ~]#
[1]+  終了                  bash test.sh
[root@localhost ~]# cat test.txt
10秒経過

短い時間で処理が終わる場合は、余り恩恵はないように感じますが、、
長い時間の処理の場合は、他の作業も並行して行える点は便利です。

また、コマンドの末尾に&とつけて実行すると、最初からバックグラウンドでジョブを実行できます。

バックグラウンドでジョブ実行
[root@localhost ~]# bash test.sh &
[1] 9407
[root@localhost ~]# jobs
[1]+  実行中               bash test.sh &

終わりに

バックグラウンドでジョブ実行する事は結構あるので、覚えておいた方が良いです。
私は、fgコマンドやbgコマンドはあまり使う機会はないです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?