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.