Em ambos os casos, o grupo de processos começa como um trabalho do shell. Quando você chama disown %1
, o shell remove essa entrada de sua lista de tarefas: esse é o ponto inteiro de disown
. Com ( sleep 200 & )
, o processo sleep
é um trabalho do subshell criado pelos parênteses; você pode ver isso executando ( sleep 200 & jobs )
. Este deixa de ser o trabalho de um shell quando esse shell sai; como com todo o resto, os trabalhos do subshell são deles, o pai nunca os vê.
Os processos permanecem na mesma sessão e ainda possuem o mesmo terminal de controle. Isso não tem nada a ver com o controle do trabalho.
Como em qualquer processo, eles podem ser mortos saindo ou recebendo um sinal. Como eles não são membros de um grupo de processos em primeiro plano (e não podem ser, já que o shell não os colocará novamente em primeiro plano), eles não receberão um SIGHUP gerado pelo kernel se o terminal desaparecer.
Um grupo de processos é um trabalho de um shell se começou como um trabalho desse shell e não deixou de ser um. Os detalhes de quais comandos se tornam trabalhos separados dependem do shell e estão além do escopo desta resposta. Em suma, se um shell tiver o controle de tarefa ativado (que é o padrão se o shell for interativo), cada comando composto será seu próprio trabalho. Em particular:
- Um pipeline é um trabalho único.
- Uma substituição de comando ou processo não é um trabalho separado, ele é executado no grupo de processos original.
- Qualquer coisa executada em segundo plano (seja iniciada com
&
ou com Ctrl + Z) é um trabalho separado.
Um grupo de processos deixa de ser um trabalho se o seu líder sair, se o shell sair, ou se o shell permitir (com disown
).