Grupos de processos, sessões e controle de trabalho
Neste capítulo, vamos nos familiarizar com grupos de processos, sessões e controle de tarefas.
Process Group- Grupo de processos é uma coleção de um ou mais processos. Um grupo de processos é constituído por um ou mais processos que compartilham o mesmo identificador de grupo de processos (PGID). Um ID de grupo de processo (PGID) é do mesmo tipo (pid_t) que o ID de processo. Um grupo de processos possui um líder de grupo de processos, que é o processo que cria o grupo e cujo ID de processo se torna o ID do grupo de processos do grupo.
Sessions - É uma coleção de vários grupos de processos.
Job Control- Isso permite que um usuário shell execute simultaneamente vários comandos (ou tarefas), um em primeiro plano e todos restantes em segundo plano. Também é possível mover os trabalhos do primeiro plano para o segundo plano e vice-versa.
Vamos entender isso com a ajuda de programas de exemplo usando shell (BASH).
Script shell (em BASH) para executar comandos básicos (data, eco, sono e cal) chamados basic_commands.sh
Script Shell (em BASH) para executar 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 o comando chmod para dar ao arquivo as permissões de execução. Por padrão, o arquivo normal obteria apenas permissões de leitura e gravação e não de execução.
Para interromper o processo em execução atual, você precisa inserir CTRL + Z. Isso lhe dá um número de trabalho. O trabalho pode ser retomado em primeiro ou segundo plano. Se necessário, para retomar o trabalho em primeiro plano, use o comando 'fg'. Se necessário, para retomar o trabalho em segundo plano, use o comando 'bg'. Ao usar isso, ele executaria apenas o último processo interrompido. E se você quiser iniciar um processo diferente do último interrompido? Basta usar o número do trabalho após fg ou bg (digamos bg% 2 ou bg% 3, etc). Se o trabalho em execução estiver em segundo plano, você pode executar qualquer outra tarefa em primeiro plano. Para obter a lista de trabalhos, use o comando, trabalhos. Também é possível encerrar o processo com CTRL + C ou comando kill. Você pode passar o número do trabalho enquanto usa o comando kill.
Verifique a seguinte saída que demonstra como interromper os trabalhos, mover os trabalhos do primeiro plano para o segundo plano e vice-versa, encerrar os trabalhos, 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