Abrindo um novo terminal e digitando o comando firefox&
dentro, ps -l
dá:
4 R 1000 23132 23104 99 80 0 - 2177945 - pts/27 00:00:07 firefox
Se o shell for fechado com o comando exit
, o processo filho do firefox permanecerá aberto!
Sempre foi assim? O Firefox não deveria estar fechando também? Existe algo novo em um kernel recente ou algo que estou perdendo?
O resultado de ps -el|grep firefox
é então:
4 S 1000 23132 1 14 80 0 - 2233312 poll_s ? 00:00:21 firefox
O PPID foi alterado para 1.
O que é responsável por esta mudança de PPID para 1?
EDIT: Ah, acabei de perceber que fechar o terminal e fechar o shell tem resultados muito diferentes: fechar o terminal fecha todos os processos filhos, mas não quando o shell é fechado com o comando exit... Não faço ideia do porquê. (Fechar o terminal está enviando SIGTERM para todos os processos filhos? Mas fechar o shell está deixando órfãos?)
Não, se um processo sair, seus filhos continuarão em execução, seu processo pai será alterado para
init
(PID 1). Ou algum outro processo dependente do sistema, procure, por exemplo, "subreapers" no Linux.Esse sempre foi o caso, é o que permite
nohup
trabalhar de forma útil, assim como o processo antigo de transformar um processo em um daemon bifurcando duas vezes, chamandosetsid()
e saindo dos processos pai.Fechar uma sessão de terminal pode enviar
SIGHUP
para os processos restantes, mas eles são livres para ignorá-la (e é isso quenohup
faz). Além disso,systemd
pode ser configurado para matar qualquer processo remanescente quando uma sessão de login do terminal é encerrada, mas você provavelmente está executandofirefox
no X a partir de um emulador de terminal, então isso não se aplica.