Inter-process-communication-process-groups-sessions-job-control

提供:Dev Guides
移動先:案内検索

プロセスグループ、セッション、ジョブ制御

この章では、プロセスグループ、セッション、およびジョブ制御に精通します。

プロセスグループ-プロセスグループは、1つ以上のプロセスの集合です。 プロセスグループは、同じプロセスグループ識別子(PGID)を共有する1つ以上のプロセスで構成されます。 プロセスグループID(PGID)は、プロセスIDと同じタイプ(pid_t)です。 プロセスグループにはプロセスグループリーダーがあります。これは、グループを作成し、そのプロセスIDがグループのプロセスグループIDになるプロセスです。

セッション-さまざまなプロセスグループのコレクションです。

ジョブコントロール-これにより、シェルユーザーは複数のコマンド(またはジョブ)を同時に実行できます。1つはフォアグラウンドにあり、残りはすべてバックグラウンドにあります。 ジョブをフォアグラウンドからバックグラウンドに、またはその逆に移動することもできます。

これをシェル(BASH)を使用したプログラム例の助けを借りて理解しましょう。

  • basic_commands.shという名前の基本的なコマンド(date、echo、sleep、cal)を実行するシェルスクリプト(BASH)
  • 基本コマンド(ps、echo)を実行するためのシェルスクリプト(BASH)
#!/bin/bash
#basic_commands.sh

date
echo "Now sleeping for 250 seconds, so that testing job control functionality is smooth"
sleep 250
cal
#!/bin/bash
#process_status.sh

ps
echo "Now sleeping for 200 seconds, so that testing job control functionality is smooth"
sleep 200
ps

chmodコマンドを使用して、ファイルに実行権限を付与します。 デフォルトでは、通常のファイルは読み取りおよび書き込み権限のみを取得し、実行権限は取得しません。

現在実行中のプロセスを停止するには、CTRL + Zを入力する必要があります。 これにより、ジョブ番号が得られます。 ジョブは、フォアグラウンドまたはバックグラウンドで再開できます。 必要に応じて、フォアグラウンドでジョブを再開するには、「fg」コマンドを使用します。 必要に応じて、バックグラウンドでジョブを再開するには、「bg」コマンドを使用します。 これを使用すると、最後に停止したプロセスのみが実行されます。 最後に停止したプロセス以外を開始したい場合はどうしますか? fgまたはbgの後にジョブ番号を使用するだけです(たとえば、bg%2またはbg%3など)。 実行中のジョブがバックグラウンドにある場合、他のタスクをフォアグラウンドで実行できます。 ジョブのリストを取得するには、コマンド、ジョブを使用します。 CTRL + Cまたはkillコマンドを使用してプロセスを終了することもできます。 killコマンドの使用中にジョブ番号を渡すことができます。

ジョブの停止、フォアグラウンドからバックグラウンドへのジョブの移動、ジョブの終了などを示す次の出力を確認してください。

chmod u+x basic_commands.sh
chmod u+x process_status.sh

./basic_commands.sh
Wed Jul 5 18:30:27 IST 2017
Now sleeping for 250 seconds, so that testing job control functionality is smooth
^Z
[1]+ Stopped ./basic_commands.sh
./process_status.sh
PID   TTY   TIME     CMD
2295  pts/1 00:00:00 bash
4222  pts/1 00:00:00 basic_commands.
4224  pts/1 00:00:00 sleep
4225  pts/1 00:00:00 process_status.
4226  pts/1 00:00:00 ps
Now sleeping for 200 seconds, so that testing job control functionality is smooth
^Z
[2]+ Stopped      ./process_status.sh
jobs
[1]- Stopped      ./basic_commands.sh
[2]+ Stopped      ./process_status.sh
fg
./process_status.sh
^Z
[2]+ Stopped      ./process_status.sh
fg %2
./process_status.sh
^Z
[2]+ Stopped      ./process_status.sh
fg %1
./basic_commands.sh
^Z
[1]+ Stopped      ./basic_commands.sh

jobs
[1]+ Stopped      ./basic_commands.sh
[2]- Stopped      ./process_status.sh

bg %2
[2]- ./process_status.sh &
fg
./basic_commands.sh
^Z
[1]+ Stopped      ./basic_commands.sh
jobs
[1]+ Stopped      ./basic_commands.sh
[2]- Running      ./process_status.sh &
fg %2
./process_status.sh
^Z
[2]+ Stopped      ./process_status.sh
jobs
[1]- Stopped      ./basic_commands.sh
[2]+ Stopped      ./process_status.sh
kill %1 %2
[1]- Stopped      ./basic_commands.sh
[2]+ Stopped      ./process_status.sh

[1]- Terminated   ./basic_commands.sh
[2]+ Terminated   ./process_status.sh