2. 所有者に対するパーミッションの状態 3. グループに対するパーミッションの状態
7.5 ジョブ制御
ジョブ制御に関連したコマンド には、以下のものがあります。
ジョブ制御コマンド ジョブ制御コマンド
command& コマンド をバックグラウンド ジョブとして実行する
ps プロセス状態を表示する
jobs (-l) バックグラウンド ジョブの状態を表示する
nohup command& ログアウト後もコマンド を実行する
fg %n ジョブ n をフォアグラウンド にする
bg %n ジョブ n をバックグラウンド にする
^
z フォアグラウンド ジョブの実行を一時停止する
stop %n バックグラウンド ジョブ nの実行を一時停止する
notify %n ジョブ n の状態変化を通知する
set notify 任意のジョブの状態変化を通知するようにする
kill %n ジョブnを終了させる
^
c フォアグラウンド ジョブの途中終了 (Ctrl+c)
先ほど作成したシェルプログラム(\loop")を実行しながら、ジョブ制御コマンド の使用例 を示します。
1. \loop"プログラムをバックグラウンド で実行します。
sophia% lo op &
3 0
2 1
2. ジョブ[1]がプロセス番号xxxxで実行されたことが表示されます。
[1] xxxx
3. 再度\loop"プログラムをバックグラウンド で実行します。
sophia% lo op &
3 0
2 1
4. ジョブ[2]がプロセス番号yyyyで実行されたことが表示されます。
[2] yyyy
5. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
[1] + Running loop ( ジョブ[1]がloopプログラムを実行している
[2] - Running loop ( ジョブ[2]がloopプログラムを実行している
sophia% jobs -l 3 0
2 1
( オプション -l (エル) をつけるとプロセス番号も表示
[1] + xxxx Running loop
[2] - yyyy Running loop
6. プロセスの状態を表示します。
sophia% ps 3 0
2 1
PID TTY S TIME CMD
xxxx ttyxx S 0:00 /bin/sh loop
yyyy ttyxx S 0:00 sleep 10
zzzz ttyxx R 0:00 ps
表 示 意 味
PID プロセスID番号
TTY 使用端末番号
S 状態(S:待ち R:実行)
CMD 実行コマンド 名称
7. ジョブ[1]を一時停止します。
sophia% stop %1 3 0
2 1
[1] +Stopped (signal) loop ( ジョブ[1]を停止したことを表示
8. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
[1] +Stopped (signal) loop ( ジョブ[1]が停止しているのがわかる
[2] -Running loop
9. ジョブ[1]の実行を再開します。
10. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
[1] Running loop ( ジョブ [1]の実行が再開されている
[2] +Running loop
11. ジョブ[1]を終了させます。
sophia% kill %1 3 0
2 1
12. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
[1] Terminated loop ( ジョブ[1]が終了したことを表示
[2] +Running loop
13. ジョブ[2]を終了させます。
sophia% kill %2 3 0
2 1
14. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
[2] Terminated loop ( ジョブ[2]が終了したことを表示
15. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
sophia% (ジョブが何も実行されていないことがわかる
次に動作中のジョブを一時停止する方法を説明します。
1. \/etc/rc"ファイルを\more"コマンド で見ます。
sophia% more/etc/rc 3 0
2 1
:
# @(#) /etc/rc $Revision:
:
:
echo "Automatic reboot in progress..." >/dev/console
2.
^
z (Ctrlキーを押しながら\z"を押す)を実行します。
:
# @(#) /etc/rc $Revision:
:
:
echo "Automatic reboot in progress..." >/dev/console
Stopped
sophia%
画面左下側に\Stopped"というメッセージが表示され、コマンドプロンプト状態になり ます。
3. バックグラウンド ジョブの状態を表示します。
sophia% jobs 3 0
2 1
[1] +Stopped more /etc/rc ( \more /etc/rc"が一時停止している
4. ジョブ[1]の実行を再開します。
sophia% fg %1 3 0
2 1
:
# @(#) /etc/rc $Revision:
:
:
echo "Automatic reboot in progress..." >/dev/console
バックグラウンド 実行したジョブが終了したか否を判断するには 21キーを押すか、次のよ
うに\notify"を設定することで容易にできるようになります。
1. \work"をバックグラウンド で実行します。
sophia% work &
3 0
2 1
[1] +Running work
2. 10秒以上待ってから3201キーを押します。
sophia%
3 0
2 1
[2] Done work
3. \notify"を設定します。
sophia% set notify 3 0
2 1
4. \work"をバックグラウンド で実行します。
sophia% work &
3 0
2 1
[1] +Running work
5. 10秒以上経つと、
3 0
2 1キーを押さなくてもジョブが終了するとその状態を表示します。
[2] Done work