Prozessgruppen, Sitzungen und Jobsteuerung

In diesem Kapitel werden wir uns mit Prozessgruppen, Sitzungen und Jobsteuerung vertraut machen.

Process Group- Prozessgruppe ist eine Sammlung von einem oder mehreren Prozessen. Eine Prozessgruppe besteht aus einem oder mehreren Prozessen, die dieselbe Prozessgruppen-ID (PGID) verwenden. Eine Prozessgruppen-ID (PGID) hat denselben Typ (pid_t) wie die Prozess-ID. Eine Prozessgruppe hat einen Prozessgruppenleiter. Dies ist der Prozess, der die Gruppe erstellt und dessen Prozess-ID zur Prozessgruppen-ID der Gruppe wird.

Sessions - Es ist eine Sammlung verschiedener Prozessgruppen.

Job Control- Dadurch kann ein Shell-Benutzer mehrere Befehle (oder Jobs) gleichzeitig ausführen, einen im Vordergrund und alle im Hintergrund. Es ist auch möglich, die Jobs vom Vordergrund in den Hintergrund und umgekehrt zu verschieben.

Lassen Sie uns dies anhand von Beispielprogrammen verstehen, die Shell (BASH) verwenden.

  • Shell-Skript (in BASH) zum Ausführen grundlegender Befehle (Datum, Echo, Ruhezustand und Cal) mit dem Namen basic_commands.sh

  • Shell-Skript (in BASH) zur Ausführung grundlegender Befehle (ps, echo)

#!/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

Verwenden Sie den Befehl chmod, um der Datei die Ausführungsberechtigungen zu erteilen. Standardmäßig erhält die normale Datei nur Lese- und Schreibberechtigungen und keine Ausführungsberechtigungen.

Um den aktuell ausgeführten Prozess zu stoppen, müssen Sie STRG + Z eingeben. Dies gibt Ihnen eine Jobnummer. Der Job kann entweder im Vordergrund oder im Hintergrund fortgesetzt werden. Verwenden Sie bei Bedarf den Befehl 'fg', um den Job im Vordergrund fortzusetzen. Verwenden Sie bei Bedarf den Befehl 'bg', um den Job im Hintergrund fortzusetzen. Auf diese Weise würde nur der zuletzt gestoppte Prozess ausgeführt. Was ist, wenn Sie einen anderen als den zuletzt gestoppten Prozess starten möchten? Verwenden Sie einfach die Jobnummer nach fg oder bg (sagen Sie bg% 2 oder bg% 3 usw.). Wenn sich der ausgeführte Job im Hintergrund befindet, können Sie alle anderen Aufgaben im Vordergrund ausführen. Verwenden Sie den Befehl jobs, um die Liste der Jobs abzurufen. Es ist auch möglich, den Vorgang entweder mit STRG + C oder mit dem Befehl kill zu beenden. Sie können die Auftragsnummer mit dem Befehl kill übergeben.

Überprüfen Sie die folgende Ausgabe, die zeigt, wie Sie die Jobs stoppen, die Jobs vom Vordergrund in den Hintergrund verschieben und umgekehrt, die Jobs beenden usw.

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