Eu procurei por isso antes, mas nunca consegui encontrar uma resposta.
No Windows, se eu tiver uma janela do console aberta, digite winmine
e pressione enter, o Campo Minado aparecerá, completamente separado do programa cmd. A instância do Campo Minado não está vinculada ao prompt de comando de nenhuma maneira que eu saiba, com a exceção do pai do Campo Minado sendo definido para essa instância do prompt. É diferente no Linux, no entanto.
No Linux, se eu tiver uma janela do console aberta, digite emacs
e pressione enter, o Emacs será aberto, mas parece ligado à linha de comando. Especificamente, parece que não posso mais usar a linha de comando até que a instância do Emacs seja fechada. Existe uma maneira de replicar o comportamento do Windows no Linux?
Obrigado!
fonte
Respostas:
In
bash
,detach
é um built-in, usado da seguinte maneira:Em
zsh
, você pode colocar em segundo plano e desanexar em uma única operação:fonte
Anexe
&
à linha de comando:Isso colocará o emacs em segundo plano e permitirá que você continue usando seu terminal.
Observe que isso ainda deixará o emacs como um subprocesso do seu terminal e, quando você sair do terminal, também sairá do emacs. Para evitar isso, digite:
Os parênteses dizem ao terminal para desconectar o processo emacs do terminal.
Ainda assim, as mensagens stdout e stderr do programa aparecerão no terminal. Para evitar isso, use:
fonte
Ctrl
+C
na janela do terminal, este comando foi emitido, o processo é encerrado: <Use
nohup
. Como isso:nohup amarok &
Espero que isto ajude.
fonte
Publiquei uma resposta em um tópico antigo de tópico semelhante com respostas de várias fontes. A seguir, uma cópia dessa resposta adaptada para este tópico.
Trabalhos seguintes:
Esta é a resposta de Nathan Fellman mais o redirecionamento.
"&> / dev / null" redireciona stdout e stderr para o dispositivo nulo. O último e comercial faz com que o processo seja executado em segundo plano. Os parênteses ao redor do comando farão com que seu "gui_app" seja executado em um subshell.
Fazer isso desanexará o processo "gui_app" do console em que você executa este comando. Portanto, mesmo se você fechar o emulador de terminal pai da janela, o "gui_app" não será fechado. Eu executei isso, então olhei para a árvore do processo com o comando "pstree" e descobri que um aplicativo iniciado dessa maneira se tornará um processo filho para "init".
Por exemplo,
executará o aplicativo em segundo plano, mas se tornará um processo filho do processo do console e será encerrado quando você fechar o terminal. (Embora sair do terminal através do bash usando o comando exit ou Ctrl-D permita que o bash seja limpo, envie o processo em segundo plano para o init.)
"nohup" funciona como NawaMan sugeriu, mas que redireciona a saída e o erro para um arquivo por padrão. Como JeffG respondeu, o comando "disown" (se disponível no shell) pode desanexar o processo do terminal depois que você inicia um processo em segundo plano:
(Tudo isso se aplica ao bash. Tenho certeza de que outros shells têm outros métodos / sintaxe para fazer isso.)
Algumas referências: Disowning Processes (UNIX Power Tools)
Se for uma simples chamada para um aplicativo GUI - sem opções complicadas e outras coisas -, parece que usar um iniciador como "gmrun" ou dmenu (aviso: áudio alto) também é uma boa opção. Ligue-o a uma combinação de teclas. Ainda não uso um lançador, mas tentei esses dois.
OBSERVAÇÃO: CarlF nos comentários dos outros relatórios de encadeamento Os aplicativos GUI iniciados pelo método "gui_app &" não fecham quando ele sai do terminal pai. Eu acho que estávamos fechando o terminal de maneiras diferentes. Eu estava fechando a janela em que o emulador de terminal estava rodando. Acho que ele pode estar saindo do emulador de terminal através do shell (comando de saída ou Ctrl-D). Eu testei isso e vi que sair do bash não para a GUI iniciada como processo em segundo plano do terminal, como diz CarlF. Parece que bash retira processos em segundo plano para iniciar quando é dada a chance de limpar. De fato, esse deve ser o mecanismo pelo qual o processo em segundo plano iniciado em um subshell é enviado para o init.
fonte
O util-linux inclui uma ferramenta chamada setsid, que basicamente faz o que desanexa:
Isso será executado
someprogram
em uma nova sessão.fonte
Tente digitar
xemacs &
para abrir o XEmacs em segundo plano.Por favor, não se refira a isso como "emulando o comportamento do Windows". Ai.
Você também pode:
fonte
Coloquei o código a seguir em um arquivo de script executável chamado "sbg" para "fundo silencioso". Ele faz todas as coisas necessárias para desconectar completamente o programa que está sendo iniciado a partir do shell: redireciona stdin, stdout e stderr de / para
/dev/null
, ignora interrupções, executa em segundo plano e desanexa.Então você pode apenas fazer
sbg emacs
. Você também pode passar quaisquer argumentos que você deseja:sbg emacs --daemon FILE1 FILE2
.fonte
(gui_app &> /dev/null &)
vez (@ resposta de EMPraptor)Coloque um e comercial após o comando.
fonte
se você estiver usando o bash, poderá negar o processo:
fonte
Você pode usar esta única linha:
fonte
Como as outras respostas dizem, você pode usar o seguinte:
Se você se esquecer
&
, basta pressionarCtrl-z
e usarbg
:FYI:
Ctrl-z
interrompe o processo emacs ebg
envia para segundo plano.fonte
usando apenas
&
como$ x &
deixa o processo anexado ao terminal, peguei um pequeno programa chamadodetach
http://inglorion.net/software/detach/, que eu tenho o apelido ded
que é um pouco parecido,nohup
mas não deixa para trás um arquivo de log use-o para desanexar o mupdf :d mupdf x.pdf
fonte
Coloque isso no seu
~/.bashrc
:Agora você não precisa se lembrar de quais programas são o X11 e fazer manipulações especiais para eles, porque serão desconectados automaticamente. Note que
setsid
é melhor do quenohup
porque o último bloqueia o sinal HUP, que não é o que você precisa.PS Agora você já está
winmine
no Linux.fonte