• 検索結果がありません。

ジョブ制御

ドキュメント内 さあはじめよう,UNIX (ページ 90-96)

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

ドキュメント内 さあはじめよう,UNIX (ページ 90-96)