Digamos que você comece o trabalho assim
foo
e então deseje que você queira colocá-lo em segundo plano. Digitar Ctrl+ Ze, em seguida, bgexecuta o truque, mas congelará foo
entre Ctrl+ Ze bg. Como posso colocar foo em segundo plano sem congelá-lo primeiro?
Respostas:
Tecnicamente,
foo
já é executado em segundo plano. Você pode iniciar uma segunda sessão de terminal e a primeira continuará sendo executadafoo
enquanto você faz outras coisas.No X, isso simplesmente envolve iniciar um segundo aplicativo de terminal ou abrir outra guia se o emulador de terminal de sua escolha tiver esses recursos.
No console, se você não planejou, seria necessário mudar para um terminal virtual diferente e efetuar login novamente.
Se você usa um multiplexador de terminal como esse
screen
outmux
pode iniciar outra sessão nele. Por exemplo, na tela, isso é feito usando Ctrl+ Aimediatamente seguido por Ctrl+ C. Para alternar entre eles, use Ca Cn e Ca Cp para ir e voltar entre as sessões do terminal.fonte
foo
em si (verificação específica ausente, que eu acho que na natureza está entre rara e inexistente) não se importa se está sendo executada na janela superior ou mesmo se há algo exibindo sua saída.foo
já é executado em segundo plano" ... apenas ... Não. Tecnicamente.foo
agora, o que devo fazer?". Se você acha que essa resposta (ou outras respostas) não é útil para responder à pergunta, incentivamos você a exercer seus privilégios de voto , além de deixar uma resposta própria respondendo à pergunta pelo que você acha que é o ângulo correto, em vez de discutindo sobre uma das respostas deixadas na pergunta. Talvez você sinta que, por exemplo, a resposta de l0b0 é melhor, mas minha resposta oferece uma maneira de fazer pelo menos aproximadamente o que o OP deseja.Adicionar um
&
sinal após o comando (foo &
) colocará em segundo plano imediatamente. Mas acredito que não há como, em uma configuração padrão de terminal / shell, colocar em segundo plano algo imediatamente, uma vez que esteja em primeiro plano.fonte
O envio de um aplicativo do 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 precisa processar o pressionamento de tecla (o shell não está em primeiro plano, portanto, não pode receber um pressionamento de tecla).
Eu tenho uma configuração zsh onde posso pressionar Ctrl+ Zduas vezes em rápida sucessão; a primeira impressora suspende o processo e a segunda impressora o reinicia em segundo plano. Não sei como portá-lo para o bash.
Se você estiver executando em um emulador de terminal que permita inserir teclas, você pode injetar
^Zbg^M
(usando a^
notação para caracteres de controle). Por exemplo, com um emulador de terminal X11, executexdotool --window 1234 Ctrl_L+Z b g Return
onde 1234 é o ID da janela do emulador de terminal. Com Tela, executescreen -S foo -p 12 -X stuff $'\032bg\r'
ondefoo
é o nome da sessão de tela e12
é o ID da janela.fonte
Se sua digitação não for rápida o suficiente para o caso, execute a
kill -s SIGSTOP 1023 && kill -s SIGCONT 1023
partir de outro shell, supondo 1023 como PID de destino.AVISO LEGAL: Como Ruslan provavelmente sabia, essa sequência realmente reinicia o trabalho tão rapidamente
bash
que nem percebe.fonte