Coloca o trabalho em segundo plano sem congelar

7

Digamos que você comece o trabalho assim

foo

e, em seguida, desejo que você queira colocá-lo em segundo plano. Digitar Ctrl + Z e então b g faz o truque, mas irá congelar foo entre Ctrl + Z e b g . Como posso colocar o foo em segundo plano sem primeiro congelá-lo?

    
por user877329 05.08.2014 / 08:36

4 respostas

4

O envio de um aplicativo de primeiro plano para o segundo plano requer cooperação do terminal e do shell. O terminal não pode fazer isso sozinho, porque o shell precisa definir o grupo de processos em primeiro plano. O shell não pode fazer isso sozinho, porque o terminal tem que processar a tecla pressionada (o shell não está em primeiro plano, então ele não pode receber um pressionamento de tecla).

Eu tenho um configuração zsh onde eu posso pressionar Ctrl + Z duas vezes em rápida sucessão; a primeira impressora suspende o processo e a segunda impressora a retoma em segundo plano. Eu não sei como portá-lo para bater.

Se você estiver executando um emulador de terminal que permite injetar pressionamentos de teclas, poderá injetar ^Zbg^M (usando ^ notation para caracteres de controle). Por exemplo, com um emulador de terminal X11, execute xdotool --window 1234 Ctrl_L+Z b g Return em que 1234 é o ID da janela do emulador de terminal. Com Screen, execute screen -S foo -p 12 -X stuff $'2bg\r' , em que foo é o nome da sessão de tela e 12 é o ID da janela.

    
por 06.08.2014 / 02:44
3

Tecnicamente foo já é executado em segundo plano. Você pode iniciar uma segunda sessão de terminal e a primeira continuará a executar foo enquanto faz outras coisas.

No X, isso envolve simplesmente iniciar um segundo aplicativo de terminal ou abrir outra guia se o emulador de terminal escolhido tiver esses recursos.

No console, se você não planejou, precisará alternar para um terminal virtual diferente e fazer login novamente.

Se você usar um multiplexador de terminal como screen ou tmux , poderá iniciar outra sessão dentro dele. Por exemplo, na tela, isso é feito usando Ctrl + A imediatamente seguido por Ctrl + C . Para alternar entre eles, use C-a C-n e C-a C-p para ir e voltar entre sessões de terminal.

    
por 05.08.2014 / 08:43
3

Adicionando um sinal & depois que o comando ( foo & ) for exibido em segundo plano imediatamente. Mas eu acredito que não há nenhuma maneira, em uma configuração terminal / shell padrão , de contextualizar algo imediatamente quando ele for colocado em primeiro plano.

    
por 05.08.2014 / 09:00
2

Se a sua digitação não for rápida o suficiente para o caso, execute kill -s SIGSTOP 1023 && kill -s SIGCONT 1023 de outro shell, supondo 1023 como PID de destino.

EXCLUSÃO DE RESPONSABILIDADE: Como Ruslan provavelmente sabia, essa sequência realmente reinicia o trabalho tão rapidamente bash não percebe isso.

    
por 05.08.2014 / 09:07

Tags