Groupes de processus, sessions et contrôle des travaux

Dans ce chapitre, nous nous familiariserons avec les groupes de processus, les sessions et le contrôle des travaux.

Process Group- Le groupe de processus est une collection d'un ou plusieurs processus. Un groupe de processus est constitué d'un ou plusieurs processus partageant le même identificateur de groupe de processus (PGID). Un ID de groupe de processus (PGID) est du même type (pid_t) que l'ID de processus. Un groupe de processus a un chef de groupe de processus, qui est le processus qui crée le groupe et dont l'ID de processus devient l'ID de groupe de processus du groupe.

Sessions - C'est une collection de divers groupes de processus.

Job Control- Cela permet à un utilisateur du shell d'exécuter simultanément plusieurs commandes (ou tâches), une au premier plan et toutes restant en arrière-plan. Il est également possible de déplacer les travaux du premier plan vers l'arrière-plan et vice-versa.

Comprenons cela à l'aide d'exemples de programmes utilisant shell (BASH).

  • Script shell (en BASH) pour exécuter des commandes de base (date, écho, sleep et cal) nommées basic_commands.sh

  • Script shell (en BASH) pour exécuter des commandes de base (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

Utilisez la commande chmod pour donner au fichier les autorisations d'exécution. Par défaut, le fichier normal n'obtiendrait que les autorisations de lecture et d'écriture et non les autorisations d'exécution.

Pour arrêter le processus en cours d'exécution, vous devez entrer CTRL + Z. Cela vous donne un numéro de poste. Le travail peut être repris au premier plan ou en arrière-plan. Si nécessaire, pour reprendre le travail au premier plan, utilisez la commande 'fg'. Si nécessaire, pour reprendre le travail en arrière-plan, utilisez la commande 'bg'. En utilisant cela, il n'exécuterait que le dernier processus arrêté. Que faire si vous souhaitez démarrer autrement que le dernier processus arrêté? Utilisez simplement le numéro de tâche après fg ou bg (par exemple, bg% 2 ou bg% 3, etc.). Si le travail en cours d'exécution est en arrière-plan, vous pouvez exécuter toutes les autres tâches au premier plan. Pour obtenir la liste des travaux, utilisez la commande, jobs. Il est également possible de terminer le processus avec CTRL + C ou la commande kill. Vous pouvez transmettre le numéro de travail en utilisant la commande kill.

Vérifiez la sortie suivante qui montre l'arrêt des travaux, le déplacement des travaux du premier plan vers l'arrière-plan et vice versa, la fin des travaux, etc.

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