Linux環境での「ジョブ」とは?

Linux環境での「ジョブ」とは?

Linuxマシンで作業を完了し、さぁログアウトして帰ろうとすると「停止しているジョブがあります。」と表示され、ジョブってなんだ?っとなったことがありました。

その時調べたLinuxにおける「ジョブ」とはなにかについてまとめておきたいと思います。

ジョブとは

Linuxにおけるジョブとは、シェル上で実行するコマンドやプログラムの処理のかたまりのことです。たとえば、コマンドを一つ実行しても、それがひとつのジョブとなります。

ジョブの実行モード

ジョブは、フォアグラウンドまたはバックグラウンドで実行されます。

シェル上で普通にコマンドを実行すると、そのジョブはフォアグラウンドで実行され、ジョブが終了するまでそのシェル上で次の作業はできなくなります。

そこで、時間がかかるような処理を実行するときは、バックグラウンドで実行させることで、ジョブの終了を待たずに次の作業を行うことができるようになります。

ジョブの操作

ジョブの操作方法は以下のとおりです。

バックグラウンドで実行中のジョブを確認

バックグラウンドで実行中のジョブを確認するには「jobs」コマンドを実行します。

# jobs
[1]   停止                  tail -f /var/log/messages
[2]-  実行中                tail -f /var/log/secure
[3]+  停止                  man bash

[]内の数字はジョブ番号です。

コマンドをバックグラウンドのジョブとして実行

コマンドをバックグラウンドのジョブとして実行するには「command &」とします。

端末を閉じた後や、ログアウト後もプログラムを実行させ続けたいときは「nohup command &」とします。

# man systemd &
[4] 2668

# jobs
[1]   停止                  tail -f /var/log/messages
[2]   実行中                tail -f /var/log/secure
[3]-  停止                  man bash
[4]+  停止                  man systemd

ジョブの実行モードを変更

現在、フォアグラウンドで実行中のジョブをバックグラウンドへ変更するには、まず「Ctrl+z」でジョブを一時停止させ、そのあとジョブ番号を引数にして「bg」コマンドを実行します。

# tail -f /var/log/messages
~省略~
^Z ←「Ctrl+z」でジョブを一時停止させています。
[1]+ 停止 tail -f /var/log/messages

# bg 1
[1]+ tail -f /var/log/messages &

# jobs
[1]+  実行中               tail -f /var/log/messages &

逆に、バックグラウンドで実行中のジョブをフォアグラウンドへ変更するには、まず「jobs」コマンドでフォアグラウンドへ変更したいジョブの番号を確認後、ジョブ番号を引数にして「fg」コマンドを実行します。

# jobs
[1]+  実行中               tail -f /var/log/messages &

# fg 1
tail -f /var/log/messages
~省略~

ジョブを終了するには

まず「jobs」コマンドで終了させたいジョブの番号を確認後、「kill %<ジョブ番号>」でジョブを終了させることができます。たとえば「kill %2」でジョブ番号2を終了させることができます。

# jobs
[1]-  停止                  tail -f /var/log/messages
[2]+  停止                  tail -f /var/log/secure

#kill %2
[2]+  停止                  tail -f /var/log/secure

#jobs
[1]+  停止                  tail -f /var/log/messages

あとがき

ジョブを使いこなせると、ファイルの編集中にちょっと別のプログラム実⾏したいときなどに別窓を開いたりしなくてもよくなり、意外に便利です。