Alguns aplicativos de GUI são iniciados de maneira limpa via linha de comando do Terminal, mas outros não, e fazem com que o Terminal aguarde o término do aplicativo. Mesmo assim, alguns não "liberam" a linha de comando.
O misterioso &
sufixo " e comercial" parece fazer com que o terminal coloque o processo em segundo plano (mas não tenho certeza do que acontece lá).
Existe uma maneira de iniciar um aplicativo pelo Terminal para que não ocorra um efeito de "espera", assim como iniciar algo via Alt+ F2?
Gostaria de ter a linha de comando disponível novamente imediatamente, sem algo ainda em segundo plano e sem impressão no terminal.
command-line
gui
Peter.O
fonte
fonte
screen
(mencionado por Oli e RobinJ). Estou impressionado com sua capacidade; depois de ler e experimentar ... Requer apenas a digitação de:screen -d -m gedit
(ouscreen gedit
entãoCtrl+a d
desconectar) ... e ainda tenho acesso total à visualização do terminal do gedit (para mensagens de aviso etc.) a qualquer momento,screen -r
mesmo que eu ter fechado a janela de terminal original, entretanto ...&
sufixo do comando. Isso pode ser útil para esclarecimentos: Qual é a diferença entre Terminal, Console, Shell e Linha de Comando?Respostas:
No caso do gedit, eu apenas mantenho uma cópia aberta o tempo todo. Contanto que você tenha uma cópia em execução, iniciar
gedit
chamadas do terminal e depois fechar o terminal não matará o gedit.Por outras coisas, o que as outras pessoas disseram também funcionaria. Sou fã de
nohup
... Mas se você precisar de um terminal, poderá desconectar e depois reconectá-lo, quer dar uma olhadascreen
.irssi
ou mesmowatch uptime
seriam bons exemplos.screen -r
e BOOM, você voltou.screen
é muito maior que isso e você pode combiná-lobyobu
para obter uma melhor experiência de terminal. Leia ao redor.fonte
Suponha que
gedit
o programa que você deseja executar seja desanexado (também conhecido como "deserdado", "desemaranhado", "desacoplado"). Existem diferentes maneiras, dependendo do que você deseja fazer exatamente:Programa já em execução
Disown:
disown -h
é o caminho a percorrer se você quiser fazer isso com um programa já em execução (ou seja, se você se esqueceunohup
). Você primeiro precisa parar usando Ctrl+ Z. Então você pode colocar em segundo plano usandobg [jobId]
(por exemplobg 1
). Você obtém uma lista dos trabalhos em execução com o jobId usandojobs
. Depois disso, você pode separá-lo do terminal usandodisown -h %[jobId]
. Exemplo de sessão de terminal:Programa ainda não iniciado
nohup
nohup
nem sempre está presente em todas as máquinas. Se você sabe que deseja desacoplar antes, usaria:Talvez você vai querer redirecionar a saída shell bem e seu programa de uma fonte de entrada pseudo, então:
nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Você deseja redirecionar a saída para não se incomodar com ela ou usá-la mais tarde. A entrada nula pode ajudar a evitar hickups no ssh.Subshell:
Você pode obter um efeito semelhante ao
Os colchetes abrem um novo subshell para executar o gedit. O
>/dev/null 2>&1
redireciona a saída do shell para lugar nenhum (suprimindo a saída). E&
no final coloca o processo em segundo plano.Multiplexação de terminais
Também multiplexação de terminal usando tela ou byobu . Basicamente, você executa o programa em um terminal próprio. Eu realmente recomendo o byobu por outras razões também. Abaixo está uma lista de atalhos de boybu que podem ser úteis para seus primeiros passos:
Útil:
Menos útil:
O daemon 'at' e outros
at
é uma pequena ferramenta útil para executar um comando em um horário agendado. Pode ser 'mal utilizado' para desanexar um comando do shell:Além disso, você pode analisar
setsid
estart-stop-daemon
, mas os outros métodos devem ser suficientes.fonte
bg %1
você, basta digitarbg
.Sim, e muitas vezes é o que você deseja. Se você esquecer de usar &, poderá suspender o programa com ctrl-z e colocá-lo em segundo plano com o comando bg - e continuar a usar esse shell.
O processo 'stdin, stdout e stderr ainda estão conectados ao terminal; você pode redirecionar aqueles de / para / dev / null ou qualquer outro arquivo (por exemplo, salve um log de saída em algum lugar), conforme desejado:
Você pode ver o processo nos trabalhos, trazê-lo de volta ao primeiro plano (comando fg) e enviar sinais (comando kill).
Alguns programas gráficos serão desconectados do terminal; se for esse o caso, quando você executar o comando "normalmente", notará que ele inicia o programa gráfico e "sai".
Aqui está um script curto , você pode colocá-lo em ~ / bin , que chamei de runbg:
Eu procuro o programa ($ prog) antes de redirecionar para que erros na localização possam ser relatados. Execute-o como "runbg your-command args ..."; você ainda pode redirecionar stdout / err para um arquivo se precisar salvar a saída em algum lugar.
Exceto pelos redirecionamentos e tratamento de erros, isso é equivalente à resposta do htorque .
fonte
ctrl-z
(suspend) me dá acesso à linha de comando novamente, mas apaga a GUI até eu emitir obg
que parece des-suspendê-la. (faz sentido) ... Existe outro comando pelo qual eu posso desconectar a GUI ... Aha! Agora eu vejo o que você quer dizer comsighals (kill command)
... (coisas interessantes esses sinais) .. Eu usei um trecho de código para gerardd
estatísticas progressivamente progressivas .. e ele usoukill
+ um SINAL ... Existe um SINAL específico para desanexar um "trabalho" "?disown
trabalhos -p gedit`` e parecia remover o trabalho .... (mas recebi mensagens do sistema no Terminal quando fechei manualmente o gedit ... mas acho Eu tenho um Terminal ferrou-up no momento ... muito experimentar :(jobs -p command
se você tiver várias instâncias de um comando executando em segundo plano por vez. você pode usarjobs
para encontrar o ID do trabalho correto e, em seguida,jobs -p <job-id>
obter o PID do trabalho. Pessoalmente, acho a versão com o subshell muito mais fácil. ;-)gedit & disown
Para iniciar um aplicativo e desanexá-lo do terminal iniciado, use & !.
fonte
disown <pid-of-command>
depois de iniciar o comando em segundo plano.Usar
nohup
Por exemplo:
fonte
nohup
? Por favor elabore.nohup
deve ser usado neste cenário.nohup
aplicativo (e odisown
bash embutido) não permitem que o sinal chegue ao aplicativo.nohup
cria um arquivo no diretório atual chamadonohup.out
. Veja a página de manual para mais detalhes. Eu prefirodisown
por esse motivo e pelo fato dedisown
funcionar após o lançamentogedit
.Abra o terminal, digite tela , digite o comando que deseja executar, feche o terminal. O programa deve continuar em execução na sessão GNU Screen .
fonte
Isso funcionou para mim:
fonte
xdg-open
Dê uma olhada neste utilitário de uso geral: https://linux.die.net/man/1/xdg-open
Isso abrirá um local relativo no seu gerenciador de arquivos.
Isso abrirá um arquivo pdf em um leitor de pdf.
Você pode até fornecer URLs da web
fonte
Como muita gente imaginou, nohup é a coisa a considerar. Mas o nohup stills permanece aberto no terminal e exibe a atividade do programa no terminal, o que é irritante. Você pode simplesmente fechar o terminal depois disso para evitar isso. Eu descobri uma solução muito simples que eu uso.
E é isso. Abre o gedit e fecha o terminal quando o gedit é iniciado. Como o gedit não está associado ao terminal agora, ele permanece ativo.
fonte
Isso funciona mesmo dentro de um script (como aliases, o trailer '&' normalmente não é permitido em scripts porque eles não são interativos):
fonte
Isso funcionou para mim:
fonte