Por que o comando continua em execução após fechar o terminal via exit?

Por que o comando continua em execução após fechar o terminal via exit?

Por que quando faço command & exitno terminal (como vimiv & exit)vimivcontinua funcionando quando o terminal está fechado? eu esperavavimivpara começar como um trabalho em segundo plano no terminal atual e então receber umsuspiroquando o terminal está fechado e também sai. Por exemplo, se eu executar vimiv &seguido de outro exitcomando,vimivirá fechar

Responder1

Eu esperava que o vimiv iniciasse como um trabalho em segundo plano no terminal atual e então recebesse um suspiro quando o terminal fosse fechado e também saísse.

Não, não é isso que acontece. vimivsó receberia um SIGHUPsinal (do kernel) se fosse umprimeiro planotrabalho, ou se fosse umparoutrabalho em segundo plano. Mas não é nenhum dos dois: é um trabalho em segundo plano em execução.

Ou se o bash (bash em particular, e não qualquer shell em geral) tivesse recebido um SIGHUPsinal e o tivesse enviado a todos os seus trabalhos não rejeitados. Mas no seu exemplo os shells saem normalmente via exit, não porque foram sinalizados por SIGHUP[1].

Por exemplo, se eu executar vimiv &seguido de outro exitcomando, vimivfechará

Isso pode ser algo especial para esse vimiv &programa - se eu entrar xclock &e depois exitem uma linha separada em um terminal, xclocknão será encerrado. No entanto, ele terminará se eu fechar o terminal a partir do Xbotão, pois nesse caso bashreceberá um SIGHUPsinal e o reenviará para xclock.

[1] bash também pode enviar a SIGHUPao sair normalmente, mas apenas com shopt -s huponexit, que não é o padrão.

informação relacionada