O início do programa GUI do terminal Linux impede o uso posterior

4

Eu procuraria por isto, mas não tenho ideia de como o traduzir para o motor de pesquisa.

Basicamente, quando eu inicio um programa gui a partir de uma janela de terminal, esse terminal não pode ser mais usado até que eu saia do programa. Acabei de começar a usar o dwm, e não quero ter terminais inúteis espalhados depois de iniciar alguns programas gráficos .. Existe alguma maneira de contornar isso?

    
por splicer 27.10.2009 / 20:23

6 respostas

10

Todos dizendo para usar "&" está certo. Se acontecer de você esquecer, digite ^ Z (ctrl + Z) para suspender o programa e, em seguida, "bg" para dizer ao shell para executá-lo em segundo plano. Isso deixa o shell totalmente interativo, como se você tivesse iniciado o programa com o "&".

    
por 27.10.2009 / 20:57
5

Eu percebo que este é um segmento antigo, mas lembro-me de encontrar uma solução mais elaborada do que as listadas aqui.

$ (gui_app &> /dev/null &)

"& > / dev / null" redireciona stdout e stderr para o dispositivo nulo. O último e comercial torna o processo executado em segundo plano. Os parênteses ao redor do comando farão com que seu "gui_app" seja executado em uma subcamada.

Isso desanexará o processo "gui_app" do console em que você executa esse comando. Portanto, mesmo se você fechar o emulador de terminal pai da janela, o "gui_app" não será fechado. Eu corri isso, em seguida, olhei para a árvore de processo com o comando "pstree" e encontrei um aplicativo iniciado dessa forma se tornará o processo filho para "init".

Por exemplo,

$ gui_app &> /dev/null &

executará o aplicativo em segundo plano, mas se tornará um processo secundário do processo do console e terminará quando você fechar o terminal. (Embora sair do terminal através do bash usando o comando exit ou Ctrl-D, o bash será limpo, entregando o processo de segundo plano ao init.)

Como alternativa, você pode usar "nohup", mas isso redireciona a saída & erro para um arquivo por padrão. O comando "disown" (se disponível no shell) pode desanexar o processo do terminal depois que você iniciou um processo em segundo plano:

$ gui_app &
$ disown

(BTW tudo isso se aplica ao bash. Tenho certeza de que outros shells têm outros métodos / sintaxe para fazer isso.)

Super-usuário semelhante Q & A - talvez onde eu me lembre de algumas das respostas de: ... inicie programas linux GUI a partir da linha de comando, mas separados da linha de comando?

Alguma referência: Processos de rejeição (Ferramentas elétricas do UNIX)

Se é uma simples chamada para um aplicativo GUI - sem opções complicadas e tal - parece que é possível usar um iniciador como "gmrun" ou dmenu (aviso: áudio alto) também é uma boa opção. Vinculá-lo a uma combinação de teclas. Eu não uso um lançador ainda, mas tentei os dois.

OBSERVAÇÃO: CarlF nos relatórios de comentários de aplicativos da GUI iniciados por meio de "gui_app &" método não fecha quando ele sai do terminal pai. Acho que estávamos fechando o terminal de maneiras diferentes. Eu estava fechando a janela em que o emulador de terminal estava sendo executado. Acho que ele pode ter saído do emulador de terminal por meio do shell (comando de saída ou Ctrl-D). Eu testei isso e vi que sair através do bash não para a GUI iniciada como processo em segundo plano do terminal, como diz CarlF. Parece que o bash entrega os processos em segundo plano ao init quando é dada a chance de limpar. De fato, este deve ser o mecanismo pelo qual o processo em segundo plano iniciado em uma subcamada é transferido para o init.

    
por 03.04.2011 / 05:59
3

Você precisa iniciar o aplicativo em segundo plano assim:

# xeyes &

O & indica que o aplicativo deve ser lançado em segundo plano.

    
por 27.10.2009 / 20:35
1

Coloque um e comercial ( & ) após o comando e ele colocará em segundo plano permitindo que você utilize o terminal, por exemplo:

nautilus /home/john&
    
por 27.10.2009 / 20:34
0

tente

$>FooBargGui &

isto irá dizer ao shell para iniciar o processo / gui FooBarGui como processo de background e retornar ao prompt imediatamente.

    
por 27.10.2009 / 20:34
0

Você provavelmente deseja redirecionar qualquer saída do comando para / dev / null, bem como fazer o plano de fundo. IIRC:

command > /dev/null 2>&1 &

Quando eu estava usando um Sharp Zaurus PDA rodando Linux (e, IIRC, eu estava usando o gerenciador de janelas OpenBox), eu tinha um arquivo bash que eu chamei q para "Fila, rápido e silenciosamente". Você poderia então correr, dizer:

q mycommand param1 param2

Eu acredito que é assim que o script funcionou:

#!/bin/bash

$@ > /dev/null 2>&1 &
    
por 27.10.2009 / 21:10