O id do processo pai (ppid) de um processo não pode ser alterado fora do kernel; não há chamada de sistema setppid. O kernel somente alterará o ppid para (pid) 1 após o pai dos processos ter terminado - se o processo não respondeu a um sinal de que o pai foi finalizado. Para que isso aconteça, o processo precisa ter ignorado vários sinais ( SIGHUP
, SIGTERM
, etc.) antecipadamente.
screen(1)
tem um meio muito elegante de lidar com a remoção e a reativação. Quando você inicia pela primeira vez screen
, na verdade você está iniciando uma interface de usuário (ui), que por padrão criará um daemon (o gerenciador de sessões). Esse daemon não possui um terminal associado a ele, um novo grupo de processos ( setpgrp(2)
), um novo id de sessão ( setsid(2)
). O daemon, executado como SCREEN
, criará subprocessos conectados a pseudo-terminais ( pty
) e, em seguida, multiplexará os dados de ptys e ui ( screen
). Os subprocessos acham que estão falando com um terminal real.
Se o ui screen
terminar, o daemon SCREEN
ainda estará em execução, armazenando dados em buffer, manipulando sinais, aguardando um novo ui, etc., porque é um grupo de processos diferente e em sua própria sessão. Quando você reconectar com um novo ui screen
, o daemon continuará a multiplexar como estava antes. O daemon será executado e continuará em execução até que todos os subprocessos sejam finalizados, sejam eliminados, um erro fatal seja encontrado ou o host seja reinicializado.