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