Como posso executar um comando no terminal sem bloqueá-lo?

45

Eu executo muitos programas no Ubuntu a partir do terminal, mas gostaria de poder continuar usando o terminal depois de abrir um programa. Como posso colocar os programas em segundo plano para não precisar abrir outra janela?

Salvador Dalí
fonte

Respostas:

60

Existem diferentes maneiras de executar um programa do terminal e continuar usando o terminal:

  • Você pode abrir outra guia do terminal (clique com o botão direito do mouse e selecione "Abrir nova guia").
  • Você pode anexar &ao comando que você executa. Esteja ciente de que você não verá a saída de texto no terminal, como mensagens de erro.
  • Você pode digitar Ctrl- Ze depois executar bg. Isso tem o mesmo efeito que a execuçãocommand &
  • Você pode executar nohup command &e pressionar enter. (Graças a ccpizza , veja os comentários abaixo.)

No entanto, pressionar Alt- F2e, em seguida, executar seu comando a partir da GUI é geralmente considerado uma prática recomendada - não há terminal!

Observe que ao usar &(não nohup), o fechamento do terminal ainda encerrará o aplicativo, a menos que você execute disownposteriormente .

EDIT: Parece que o uso nohupàs vezes deixa pequenos excrementos na sua pasta pessoal. O que normalmente teria sido registrado no terminal é aparentemente salvo em um arquivo em ~ /.

~~

É uma maneira simples de executar um programa em segundo plano program-name & disown, que o levará a um terminal que pode ser fechado sem interromper o processo.

WindowsEscapist
fonte
4
Para evitar a interrupção do processo filho após o fechamento do terminal, você pode iniciar o aplicativo como nohup firefox&.
Ccpizza
Legal! Eu não sabia disso (mas após a experimentação, o terminal ainda está "bloqueado")!
usar o seguinte comando
não está 'bloqueado', apenas 'parece' bloqueado, se você digitar enter assim que receber um aviso.
Ccpizza 04/12/12
Ah, eu não percebi isso antes.
usar o seguinte comando
program-name & disowné uma boa solução
Doctor Henry
8

Você pode executar o comando com um & depois.

Por exemplo:

thunderbird &

Veja aqui para mais informações.

Viertaxa
fonte
Isso funciona somente até você fechar a janela do terminal, uma vez que você fechar a janela do programa será encerrado
kurdtpage
6

Você pode usar setsidpara executar o programa em uma nova sessão, além de &>/dev/nullnão receber nenhuma mensagem de log.

Então seria como

setsid program-name &>/dev/null

Rumid
fonte
Legal. Ele deve manter o processo em execução quando o logout do usuário e a sessão atual são fechados.
Mikhail Moskalev
1

Usando o screencomando, você pode abrir várias sessões de terminal usando uma única janela e tocar em

apt-get install screen (On Debian based Systems)

yum install screen (On RedHat based Systems)

screen (iniciar nova tela)

[Your command]

Ctrl+A d para sair da tela ... e assim por diante

https://linuxize.com/post/how-to-use-linux-screen/

Ahmed Ismail
fonte
0

Você pode executá-lo em um terminal virtual como tmux(ou, screenmas ouvi dizer que não é mais mantido)

# This ataches your terminal to a virtual terminal
tmux
run_your_command
# This detaches your virtual terminal (previous command can be running)
CTRL-b d
run_other_commands # on your terminal
# re-attach the virtual terminal to see the status of run_your_command
tmux a

tmux pode fazer muito mais, como:

  • mova seu terminal virtual para outro terminal
  • compartilhe o terminal virtual em vários terminais (outros usuários podem ver o que você está fazendo ;-))
  • divida a "tela" para ter vários terminais.
  • ...

https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

Sebastien DA ROCHA
fonte