Por que alguns aplicativos através do terminal se destacam automaticamente e outros não?

1

Isso é bem interessante, por exemplo:

  • Eu uso o Editor de Atom e o chamo via Terminal usando:

    $ atom
    

    e pressione Enter , que aciona o Editor e também faz o cursor do terminal apontar para a nova linha; tornando-o (Terminal) livre para outros utilitários de linha de comando.

  • No entanto, quando em uso RhythmBox usando rhythmbox como comando de terminal, ele tende a funcionar em primeiro plano (eu acho) e mantém o terminal ocupado até que eu feche Rhythmbox ou use CTRL + C .

Eu também tentei isso com texmaker e ele faz algo semelhante ao Rhythmbox . Eu sei que & levará o processo em segundo plano, mas há uma explicação lógica para alguns aplicativos, como mencionado aqui?

Quaisquer hacks ou dicas para que eu possa aprender como ajustar coisas como essa?

Nota

Eu tento usar CTRL + Z nos aplicativos mencionados acima e os aplicativos então acinzentado e não respondem e eu tenho que forçar a saída neles

Ambiente

  • Usando o Ubuntu 16.10

  • Terminal do Gnome

  • echo $SHELL give /bin/bash

por Shan-Desai 17.03.2017 / 13:57

2 respostas

3

Como foi apontado nos comentários, esse comportamento é específico para cada aplicativo. Aplicativos escritos em linguagem de programação C, por exemplo, podem empregar setsid call para desconectar do terminal de controle , embora eles exijam chamada para fork() syscall primeiro . Python, também possui os.setsid() e os.fork() funções; Embora seja possível simplesmente usar os.fork() para criar um processo filho e matar o pai .

Outra técnica muito frequente que os autores de software usam é o lançamento de aplicativos por meio do script wrapper e a chamada de um novo processo via nohup . Isso é exatamente o que o atom faz:

$ file $(which atom)
/usr/bin/atom: Bourne-Again shell script, ASCII text executable
$ grep 'nohup' $(which atom)                                                            
    nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/nohup.out" 2>&1
      cat "$ATOM_HOME/nohup.out"

Você também pode fazer isso. Por exemplo, a maneira que eu tenho a tendência de lançar programas e separá-los do terminal é através de uma função, que lança o programa desejado com nohup anexado ao comando:

runstuff() {
    nohup "$@" >/dev/null 2>&1 & 
} 

Depois de definir isso no seu .bashrc , você pode iniciar o Firefox assim:

runstuff firefox

Outra maneira é através do comando setsid (que é nomeado como a chamada do sistema C, mas na verdade é um binário independente):

setsid firefox
    
por Sergiy Kolodyazhnyy 17.03.2017 / 15:50
2

Se você usa o Ubuntu com X environemnt, pode pressionar Ctrl + F2 e, em seguida, colocar o comando necessário (por exemplo, rythmbox ). Não terá terminal separado onde você pode pressionar Ctrl + C.

Você também pode tentar executar nohup rythmbox & . Ele deve rodar seu player em backgroud e torná-lo à prova de terminais.

    
por Kamil 17.03.2017 / 14:26