O aplicativo suspenso em segundo plano (por ctrl + z) ainda deve ser executado ou deve parar de ser executado?

3

Eu corro o Firefox com o comando xinit /path/to/firefox/binary e ele abre um display com o Firefox rodando nele.

Então eu pressiono Ctrl + Alt + F1 para voltar ao console e depois pressiono Ctrl + z para suspender o Firefox em segundo plano.

Em seguida, pressiono Ctrl + Alt e F7 para voltar ao Firefox. Espero que o Firefox seja congelado ou não responda, mas ainda posso usar o Firefox sem problemas. Minha expectativa é baseada na minha experiência ao enviar outros aplicativos para o segundo plano, como wget . Quando eu envio wget para o plano de fundo, o processo de download é interrompido.

Por que isso acontece?

    
por user3405291 26.04.2016 / 12:49

2 respostas

2

O Firefox se coloca em segundo plano e se desconecta do seu terminal se você o executar a partir de um terminal. Portanto, pressionar Ctrl + Z não está realmente suspendendo o Firefox, provavelmente suspende xinit .

wget e a maioria dos programas de linha de comando não possuem esse tipo de comportamento de desanexação. Programas baseados em GUI, como gedit , são iniciados na maioria das vezes como firefox e detach.

Eu olhei se havia alguma opção para impedir que isso acontecesse. -foreground parecia um nome de opção provável, mas isso apenas empurra a janela do firefox para o primeiro plano.

    
por 26.04.2016 / 12:58
1

Pressionar Ctrl + Z suspende o aplicativo, como em, ele pára de ser executado até ser retomado com um SIGCONT (possivelmente enviado através do comando fg ou bg no shell). Mas…

Você está executando xinit , não firefox . Pressionar Ctrl + Z envia um sinal STOP para o aplicativo que está sendo executado em primeiro plano, não para outros aplicativos que possam ter sido executados. Então você suspendeu apenas xinit , e isso não afeta a sessão do X11.

Mais precisamente, pressionando Ctrl + Z envia um sinal STOP para o primeiro plano grupo de processos . Isso pode envolver mais de um processo, mas a intenção dos grupos de processos é que ainda é moralmente uma única unidade para fins de sinalização.

(O mesmo vale para Ctrl + C e SIGINT, e Ctrl + \ e SIGQUIT. Por outro lado, SIGHUP quando o terminal desaparece é enviado apenas para um único processo: o líder da sessão, normalmente o shell; os shells, por sua vez, enviam o SIGHUP para os jobs que eles iniciaram.)

xinit executa o servidor X e o cliente em seu próprio grupo de processos, precisamente para que você possa suspendê-lo ou eliminá-lo sem matar a sessão inteira. Quando você envia um sinal tocável, ele mata o servidor X, que por sua vez faz com que a maioria dos aplicativos X saia - então pressionar Ctrl + C desativa a sessão da GUI, mas indiretamente, não porque cada cliente e servidor recebiam um SIGINT devido ao Ctrl + C . Por outro lado, xinit não faz nada em particular em Ctrl + Z , de modo que apenas suspende xinit e deixa a sessão sozinha, o que é útil quando você quer fazer outra coisa no terminal onde você correu xinit .

    
por 27.04.2016 / 02:29