Eu só estava pensando, por exemplo, quando lancei qtox
com:
qtox &
E então feche o Terminal, qtox
feche com ele. No entanto, ao executar etherape
usando:
sudo etherape &
O fechamento do terminal não fecha ou causa qualquer problema ao Etherape. E entre aplicações diferentes, há um comportamento diferente, algumas fecham quando o Terminal faz, outras não, como é que acontece? Por que alguns fecham quando outros não? Estou executando o Ubuntu GNOME 15.10 com o GNOME 3.18.
qtox
sair ao fechar o terminal, sempre poderá executá-lonohup qtox &
.Respostas:
Quando você fecha um terminal, o terminal envia um sinal SIGHUP para o shell; o shell, por sua vez, envia um sinal SIGHUP para todos os seus grupos de processos filhos, que incluem grupos de processos em segundo plano;
Como cada processo único reagirá ao sinal depende inteiramente do processo: se o processo não definiu um manipulador para o sinal e disse ao kernel (através de algum syscall como
signal()
ousigaction()
) que deseja lidar com ele, o kernel executa o manipulador padrão do sinal, que no caso de um sinal SIGHUP consiste em finalizar o processo.No entanto, quando você executa um comando com
sudo
, o UID dosudo
processo e seu processo filho é definido como0
(raiz); em geral, a menos que o UID do processo que está enviando o sinal seja0
(raiz) ou igual ao processo de destino, o kernel descartará o sinal (ou seja: um processo não pode enviar sinais para um processo pertencente a outro usuário, a menos que o processo o envio do sinal pertence à raiz); é por isso que um processo executado pelo usuário, como a instância Bash executada pelo terminal, não pode SIGHUP umsudo
processo e, finalmente, fechar um terminal não afeta o processo iniciadosudo
.fonte
nohup
diante dos comandos que se aproximam do SIGHUP :) Atualizadasudo
.sudo
apenas executa o comando como outro usuário e você não pode enviar sinal para os processos de outros usuários. Vejaman 2 kill
.sudo
algum tipo de homem pobrenohup
?sudo
comsudo
por seunohup
efeito colateral, consideradas todas as outras desvantagens.nohup
, ele crianohup.out
arquivos desnecessários depois dele. Em vez disso, use odisown
comando embutido.