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

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

Process Group−プロセスグループは、1つ以上のプロセスのコレクションです。プロセスグループは、同じプロセスグループ識別子(PGID)を共有する1つ以上のプロセスで構成されます。プロセスグループID(PGID)は、プロセスIDと同じタイプ(pid_t)です。プロセスグループには、グループを作成するプロセスであり、そのプロセスIDがグループのプロセスグループIDになるプロセスグループリーダーがあります。

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

Job Control−これにより、シェルユーザーは複数のコマンド(またはジョブ)を同時に実行できます。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