Digamos que você não tenha os GNU screen
e tmux
(e os consoles virtuais X11, e ), mas queira alternar entre um shell de login e outro shell interativo.
Você deve primeiro fazer o login no console e, em seguida, iniciar um novo shell, bloqueando temporariamente o shell de login. Para obter o shell de login de volta para fazer algum trabalho lá, você faria suspend
. Então você iria fg
para obter o shell interativo de volta para continuar com o que você fez lá.
Na verdade, com o controle de tarefas, o shell de login poderia gerar vários shells interativos como trabalhos em segundo plano para os quais você poderia alternar com fg %1
, fg %2
etc., mas para voltar ao shell de login, precisa usar suspend
a menos que você queira manualmente kill -s STOP $$
.
Observe também que Ctrl + Z no prompt em um shell interativo não o suspenderá.
EDITAR: Inicialmente tive uma longa seção hipotética sobre o uso de suspend
em um script, mas como o comando requer controle de tarefas e como os shells não interativos geralmente não têm controle de job , Eu deletei essa seção.
Seção excluída com suspend
substituído por kill -s STOP $$
(isso realmente não pertence mais à resposta, mas pode ser interessante para os outros de qualquer maneira):
Digamos que você tenha um processo em segundo plano (um script) em um script e que esse processo em segundo plano, em algum momento, precise parar e aguardar o processo pai para que ele continue. Isso poderia ser para que o pai tenha tempo para extrair e mover arquivos ou algo assim.
O script filho suspenderia ( kill -s STOP $$
) e o script pai enviaria um sinal CONT
para ele quando fosse possível continuar.
Ele lhe dá a oportunidade de implementar um tipo de sincronização entre um processo pai e um processo filho (embora seja muito básico, já que o processo de shell pai precisa mais ou menos adivinhar que o processo filho está suspenso, embora isso possa ser corrigido por ter o filho trap CONT
e não suspender se esse sinal for recebido muito cedo).