Como os gerenciadores de arquivos dividem os programas abertos?

3

Estou me desafiando nas próximas semanas para usar um emulador de terminal como meu gerenciador de arquivos principal.

Eu me deparei com uma pergunta: como faço para abrir um arquivo (por exemplo, um Inkscape .svg) em seu programa GUI a partir da linha de comando? Eu sei que posso usar:

inkscape ./Design.svg &

para movê-lo para o segundo plano, mas ainda é um filho do processo gnome-terminal (e morre com ele). Além disso, quaisquer avisos de depuração, etc serão enviados para esse terminal (interrompendo e me irritando).

Como um gerenciador de arquivos como o Nautilus separa os processos do editor iniciado de uma forma que eles não estão mais conectados?

Como posso fazer isso no meu terminal?

    
por Robbie Wxyz 15.01.2016 / 20:37

1 resposta

4

Diversas formas de realizar isso são discutidas, juntamente com os méritos e desvantagens de cada um, no artigo " Executando bash comandos no fundo corretamente ". Baseada principalmente nesse artigo e também na minha própria leitura das especificações POSIX para nohup , o A maneira mais portátil de realizar o que você quer é com:

nohup inkscape ./Design.svg >/dev/null 2>&1 &

Isso não desiste do processo - seu terminal ainda é o processo pai. No entanto,

  1. O processo do inkscape não morrerá se seu terminal morrer e
  2. Você não verá nenhuma saída no seu terminal,
  3. O arquivo nohup.out não será criado em seu diretório pessoal, como seria se você tivesse removido os redirecionamentos para /dev/null . (Veja a nohup documention para obter explicações sobre este arquivo.)

Se você estiver usando bash e não se importar com a portabilidade POSIX tanto quanto com a simplicidade, então a maneira mais simples é, como @thrig observou nos comentários:

inkscape ./Design.svg & disown

Existem várias opções que você pode usar com disown , embora você não precise delas para este caso de uso. Digite help disown para ver as outras opções disponíveis.

    
por 15.01.2016 / 22:11