Grupos de procesos, sesiones y control de trabajos

En este capítulo, nos familiarizaremos con los grupos de procesos, las sesiones y el control de trabajos.

Process Group- El grupo de procesos es una colección de uno o más procesos. Un grupo de procesos está formado por uno o más procesos que comparten el mismo identificador de grupo de procesos (PGID). Un ID de grupo de procesos (PGID) es del mismo tipo (pid_t) que el ID de proceso. Un grupo de procesos tiene un líder de grupo de procesos, que es el proceso que crea el grupo y cuyo ID de proceso se convierte en el ID de grupo de procesos del grupo.

Sessions - Es una colección de varios grupos de procesos.

Job Control- Esto permite que un usuario de shell ejecute simultáneamente varios comandos (o trabajos), uno en primer plano y todos en segundo plano. También es posible mover los trabajos del primer plano al fondo y viceversa.

Entendamos esto con la ayuda de programas de ejemplo que usan shell (BASH).

  • Script de shell (en BASH) para ejecutar comandos básicos (date, echo, sleep y cal) llamados basic_commands.sh

  • Script de shell (en BASH) para ejecutar comandos básicos (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

Use el comando chmod para darle al archivo los permisos de ejecución. De forma predeterminada, el archivo normal solo obtendría permisos de lectura y escritura y no permisos de ejecución.

Para detener el proceso en ejecución actual, debe ingresar CTRL + Z. Esto le da un número de trabajo. El trabajo se puede reanudar en primer plano o en segundo plano. Si es necesario, para reanudar el trabajo en primer plano, utilice el comando 'fg'. Si es necesario, para reanudar el trabajo en segundo plano, use el comando 'bg'. Al usar esto, solo ejecutaría el último proceso detenido. ¿Qué sucede si desea iniciar otro proceso que no sea el último detenido? Simplemente use el número de trabajo después de fg o bg (digamos bg% 2 o bg% 3, etc.). Si el trabajo en ejecución está en segundo plano, puede ejecutar cualquier otra tarea en primer plano. Para obtener la lista de trabajos, use el comando, trabajos. También es posible terminar el proceso con CTRL + C o con el comando kill. Puede pasar el número de trabajo mientras usa el comando kill.

Verifique el siguiente resultado que demuestra cómo detener los trabajos, mover los trabajos del primer plano al fondo y viceversa, terminar los trabajos, 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