Gruppi di processi, sessioni e controllo del lavoro

In questo capitolo, acquisiremo familiarità con i gruppi di processi, le sessioni e il controllo dei lavori.

Process Group- Il gruppo di processi è una raccolta di uno o più processi. Un gruppo di processi è costituito da uno o più processi che condividono lo stesso identificatore di gruppo di processi (PGID). Un ID gruppo di processo (PGID) è dello stesso tipo (pid_t) dell'ID di processo. Un gruppo di processi ha un leader di gruppo di processi, che è il processo che crea il gruppo e il cui ID processo diventa l'ID gruppo di processi del gruppo.

Sessions - È una raccolta di vari gruppi di processi.

Job Control- Questo consente a un utente della shell di eseguire simultaneamente più comandi (o lavori), uno in primo piano e tutti rimanenti in background. È anche possibile spostare i lavori dal primo piano allo sfondo e viceversa.

Cerchiamo di capirlo con l'aiuto di programmi di esempio che utilizzano shell (BASH).

  • Script di shell (in BASH) per eseguire i comandi di base (date, echo, sleep e cal) denominati basic_commands.sh

  • Script di shell (in BASH) per eseguire i comandi di 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

Usa il comando chmod per dare al file i permessi di esecuzione. Per impostazione predefinita, il file normale otterrebbe solo i permessi di lettura e scrittura e non i permessi di esecuzione.

Per interrompere il processo in esecuzione in corso, è necessario immettere CTRL + Z. Questo ti dà un numero di lavoro. Il lavoro può essere ripreso in primo piano o in background. Se necessario, per riprendere il lavoro in primo piano utilizzare il comando "fg". Se necessario, per riprendere il lavoro in background, utilizzare il comando "bg". Usando questo, verrà eseguito solo l'ultimo processo interrotto. Cosa succede se si desidera avviare un processo diverso dall'ultimo processo interrotto? Usa semplicemente il numero del lavoro dopo fg o bg (ad esempio bg% 2 o bg% 3, ecc.). Se il lavoro in esecuzione è in background, è possibile eseguire qualsiasi altra attività in primo piano. Per ottenere l'elenco dei lavori, usa il comando, lavori. È anche possibile terminare il processo con CTRL + C o con il comando kill. È possibile passare il numero del lavoro mentre si utilizza il comando kill.

Controllare il seguente output che mostra l'arresto dei lavori, lo spostamento dei lavori dal primo piano allo sfondo e viceversa, la conclusione dei lavori, ecc.

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