Trabalhos de Shell em uma pílula <3

Você pode fazer um trabalho a partir de qualquer processo pressionando Ctrl+z.

Eles são suspensos por padrão.

Você pode listá-los por meio de jobs:

$ jobs
[1] + suspended htop
[2] - suspended tail -f log/prod.log | grep Critical

E depois retome-os com fg:

$ fg        # resume last job
$ fg
%1 # resume first job
$ fg
%?tail # resume job with tail in name

O %1é assim chamado job specque se refere ao [1]trabalho.

Ou coloque-os em segundo plano com um bgcomando análogo ou pós-fixando qualquer comando com um E comercial &(os trabalhos em segundo plano são apenas garfos conectados aos descritores STDOUT / ERR do shell).

Os trabalhos de primeiro plano ouvem eventos e sinais do teclado. Os de fundo não. Além disso, as tarefas interativas que foram colocadas em segundo plano são suspensas quando você interage com o shell, portanto, não são muito úteis.

Você pode habilitar jobs em seus scripts de shell, chamando set -mbuiltin:

Ativa o modo monitor. O controle de trabalho está ativado. Esta opção está ativada por padrão para shells interativos em sistemas que a suportam. Os processos em segundo plano são executados em um grupo de processos separado e uma linha contendo seu status de saída é impressa após sua conclusão.

Você pode esperar que os trabalhos em segundo plano terminem usando o waitbuiltin.

Aguarde cada processo especificado e retorne seu status de encerramento. Cada n pode ser um ID de processo ou uma especificação de trabalho. Se uma especificação de trabalho for fornecida, todos os processos nesse trabalho serão aguardados. Se n não for fornecido, todos os processos atualmente em ação serão aguardados

Você também pode fazer disownqualquer trabalho em segundo plano para torná-los daemons ou fazer a mesma coisa, mas não pode removê-los .disown -rjobs

Sem opções, cada jobpec é removido da tabela de jobs ativos. Se jobspec não estiver presente e nem -a nem -r for fornecido, a noção do shell do trabalho atual é usada. Se a opção -h for fornecida, cada especificação de trabalho não será removida da tabela, mas será marcada para que SIGHUP não seja enviado ao trabalho se o shell receber um SIGHUP. Se nenhum jobpec estiver presente e nem a opção -a nem -r for fornecida, o trabalho atual será usado. Se nenhum jobpec for fornecido, a opção -a significa remover ou marcar todos os trabalhos.

Btw. SIGHUPé enviado se você sair de qualquer shell interativo, por exemplo, fechando uma sessão ssh. Também está nohupembutido, mas normalmente você quer disownmesmo assim (então ele roda como daemon).

Claro que você pode matar qualquer trabalho (suspenso ou não) por fe .kill %1

BÔNUS! suspender e colocar em primeiro plano em um único corte (vim <3)

Sabe alguma coisa interessante sobre empregos shell? Escreva um comentário 🙂