Execução de tarefas em segundo plano


É possível iniciar qualquer comando ou pipeline em segundo plano anexando um caractere de “e” comercial (&) ao comando. O shell Bash exibe um número de tarefa (único para a sessão) e a PID do novo processo filho. O shell não aguarda o processo filho ser concluído; em vez disso, ele exibe o prompt do shell.

[user@host ~]$ sleep 10000 &
[1] 5947
[user@host ~]$

Quando uma linha de comando com um pipe (|) é enviada para o segundo plano, a PID do último comando no pipeline é exibida. Todos os processos de pipeline serão membros dessa tarefa.

[user@host ~]$ example_command | sort | mail -s "Sort output" &
[1] 5998

Use o comando jobs para exibir a lista de tarefas para a sessão do shell.

[user@host ~]$ jobs
[1]+ Running    sleep 10000 &
[user@host ~]$

Use o comando fg para trazer uma tarefa em segundo plano para o primeiro plano. Use o formato (%jobNumber) para especificar o processo em primeiro plano.

[user@host ~]$ fg %1
sleep 10000

No exemplo anterior, o comando sleep é executado em primeiro plano no terminal de controle. O shell em si está suspenso e aguardando a saída desse processo filho.

Para enviar um processo em primeiro plano ao segundo plano, pressione a solicitação de suspensão gerada pelo teclado (Ctrl+z) no terminal. A tarefa é colocada em segundo plano e suspensa.

[user@host ~]$ sleep 10000
^Z
[1]+  Stopped                 sleep 10000
[user@host ~]$

O comando ps j exibe informações sobre as tarefas. Para encontrar as informações de sessões e processos, use o comando ps j.

  • A PID é a única ID do processo.

  • A PPID é a PID do processo pai deste processo, o processo que o iniciou (ramificou).

  • A PGID é a PID do líder do grupo de processo, normalmente o primeiro processo no pipeline da tarefa.

  • A SID é a PID do líder da sessão, o que para uma tarefa normalmente é o shell interativo em execução no terminal de controle.

Neste exemplo, o comando sleep agora está suspenso e o estado de processo é T.

[user@host ~]$ ps j
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 2764  2768  2768  2768 pts/0     6377 Ss    1000   0:00 /bin/bash
 2768  5947  5947  2768 pts/0     6377 T     1000   0:00 sleep 10000
 2768  6377  6377  2768 pts/0     6377 R+    1000   0:00 ps j

Use o comando bg com a ID da tarefa para começar a executar o processo suspenso.

[user@host ~]$ bg %1
[1]+ sleep 10000 &

O shell avisa um usuário que tentar sair de uma janela de terminal (sessão) com tarefas suspensas. Se o usuário tentar sair de novo imediatamente, as tarefas suspensas serão canceladas.

Nota

Nos exemplos anteriores, o sinal + indica que essa tarefa é o padrão atual. Se um comando de controle de tarefa for usado sem o argumento %jobNumber, a ação será executada na tarefa padrão. O sinal - indica a tarefa anterior que se tornará a tarefa padrão quando a tarefa padrão atual for concluída.

Referências