"Sim, e..." é uma regra prática maravilhosa na comédia improvisada. Não tanto no mundo UNIX.
Quando executo o yes&
comando reconhecidamente bobo, não consigo interrompê-lo. O terminal trava ou fica preso em um loop.
Espero que o yes
processo seja suspenso imediatamente, pois qualquer processo em segundo plano deve ser suspenso se tentar gravar no stdout, mas não parece ser o caso e estou me perguntando o porquê.
Os processos em segundo plano que gravam no terminal são suspensos apenas se o
TOSTOP
modo de saída estiver definido, o que não é o caso por padrão. Tentare você verá que
yes
está suspenso.Os processos em segundo plano que lêem do terminal são suspensos por padrão, porque não há uma maneira sensata de obter a entrada correta.
Veja a seção sobre como acessar o terminal no manual da biblioteca GNU C.
Com
TOSTOP
desligado, o terminal não falha ou trava, ele permanece responsivo à entrada; portanto, você pode interromper o plano de fundoyes
eliminando-o (kill %
se for o único trabalho em segundo plano) ou trazendo-o para o primeiro plano (fg
) e parando-o ( CtrlC). Você terá que inserir comandos às cegas, mas eles funcionarão.A resposta de Stephen é excelente, mas eu acrescentaria que você pode recuperar o controle de sua sessão bash colocando o processo em primeiro plano e, em seguida, interrompendo-o:
Embora você não o veja, digite:
fg
Entere entãoCtrl-Cfg
é o comando de controle de trabalho para mover um trabalho em segundo plano de volta para o primeiro plano e, é claro, Ctrl-Cenviar umSIGINT
sinal para o trabalho atual. Nos casos em que você tem vários trabalhos em segundo plano,fg
pode ser seguido por umjobspec
argumento para estipular qual trabalho você deseja mover para o primeiro plano. Os detalhes estão nabash
página de manual.