ジョブ管理
ジョブとは現在実行中のプログラムのことをいいます。
1つのコマンドも、複数のコマンドをパイプで繋いだものも、1つのジョブとなります。
ジョブはフォアグラウンドとバックグラウンドのいずれかで実行され、ジョブの起動時に指定することも、起動後に変更することもできます。
シェルが端末ごとにジョブを管理しており、フォアグラウンドジョブは端末の前面で実行され、端末では他の作業(コマンド入力など)ができず、バックグラウンドジョブは端末の裏側で実行され、端末で別の作業を行うことができます。
実行するジョブをバックグランドで起動するにはコマンドラインの最後に「&」を追加します。
[コマンド実行例]
# vi /etc/passwd &
[1] 7517
[]内の数値はジョブ番号で、次の数値はプロセスIDを表します。
実行中のジョブを確認するにはjobsコマンドを使用します。
[コマンド実行例]
# jobs
[1]- 停止 vi /etc/passwd
[2]+ 停止 tail -f /var/log/secure
[3] 実行中 updatedb &
停止は一時停止中であることを表します。
jobsコマンドは-lオプションでプロセスIDを表示します。
ログアウト後もジョブを実行させたい場合は、nohupコマンドを使用します。
[コマンド書式]
nohup コマンド
現在実行中のジョブのモードをフォアグラウンドモードに変更するにはfgコマンド、
バックグラウンドモードに変更するにはbgコマンドを使用します。
フォアグランド実行中のジョブをバックグラウンドで実行するには、まず「ctrl + z 」で
ジョブ一時停止させ、ジョブ番号を引数にしてbgコマンドを実行します。
逆にバックグラウンドで実行しているジョブをフォアグラウンドに変更するには、ジョブ番号を引数にしてfgコマンドを使用します。
[コマンド実行例]
# tail -f /var/log/messages
上のコマンドを実行後、「ctrl + z 」で一時停止させます。
# jobs
[1]- 停止 vi /etc/passwd
[2]+ 停止 tail -f /var/log/messages
# bg 2
[2]+ tail -f /var/log/messages &
バックグラウンドで実行します。
# jobs
[1]+ 停止 vi /etc/passwd
[2]- 実行中 tail -f /var/log/messages &
# fg 2
tail -f /var/log/messages
フォアグラウンドで実行します。
プロセスの実行優先度
プロセスには実行優先度(プライオリティ)があり、優先順位が高いプロセスは多くのCPU時間を割り当てられ、優先的に処理が進められます。
また、実行優先度を変更するために指定する値にナイス値があります。
ナイス値は-20~19の整数をとり、優先順位はナイス値の低い順に決定され、-20が最も優先度が高くなります。
デフォルトではナイス値0でプロセスが実行されます。
優先順位やナイス値を確認するには、ps-lコマンドやtopコマンドを使用し、
PRIの列が優先順位、NIの列がナイス値です。
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 7112 7049 0 80 0 – 47492 wait pts/1 00:00:00 su
4 S 0 7117 7112 0 80 0 – 28953 wait pts/1 00:00:00 bash
0 R 0 8661 7117 0 80 0 – 28409 – pts/1 00:00:00 ps
予めナイス値を指定してプロセスを実行するにはniceコマンドを使用します。
ナイス値の指定を省略した際のナイス値は10となります。
[コマンド書式]
nice -n ナイス値 コマンド
[コマンド実行例]testプログラムを最高優先度で実行します。
# nice –20 test
または
# nice -n -20 test
[コマンド実行例]testプログラムを最低優先度で実行します。
# nice -19 test
または
# nice -n 19 test
実行中のプロセスの優先度を変更するにはreniceコマンドを使用します。
[コマンド書式]
renice -n ナイス値 オプション
reniceコマンドの主なオプションは次のとおりです。
オプション | 説明 |
---|---|
-u ユーザ名 | 指定したユーザが所有する全プロセスのナイス値を変更します -uは省略可能です |
-p プロセスID | 指定したプロセスIDのナイス値を変更します -pは省略可能です |
[コマンド実行例]プロセスID:8793のナイス値を10に変更
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 7049 7048 0 80 0 – 29055 wait pts/1 00:00:00 bash
0 T 1000 8793 7049 0 80 0 – 26720 signal pts/1 00:00:00 tail
0 R 1000 8796 7049 0 80 0 – 28409 – pts/1 00:00:00 ps
$ renice 10 8793
8793 (process ID) old priority 0, new priority 10
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 7049 7048 0 80 0 – 29055 wait pts/1 00:00:00 bash
0 T 1000 8793 7049 0 90 10 – 26720 signal pts/1 00:00:00 tail
0 R 1000 8798 7049 0 80 0 – 28409 – pts/1 00:00:00 ps
niceコマンドもreniceコマンドも一般ユーザでは優先度を上げたり、ナイス値を0より小さくしたりすることはできません。
[コマンド実行例]ユーザが最高優先度でniceコマンドを実行
$ nice –20 tail -f /var/log/named.log
nice: 優先度を設定できません: 許可がありません
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 7049 7048 0 80 0 – 29055 wait pts/1 00:00:00 bash
0 T 1000 8793 7049 0 80 0 – 26720 signal pts/1 00:00:00 tail
0 R 1000 8794 7049 0 80 0 – 28409 – pts/1 00:00:00 ps
[コマンド実行例]ナイス値10のプロセス8793のナイス値を0に変更
$ renice 0 8793
renice: failed to set priority for 8793 (process ID): 許可がありません
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 7049 7048 0 80 0 – 29055 wait pts/1 00:00:00 bash
0 T 1000 8793 7049 0 90 10 – 26720 signal pts/1 00:00:00 tail
0 R 1000 8802 7049 0 80 0 – 28409 – pts/1 00:00:00 ps
ナイス値は変わっていません。