É possível alterar o processo pai de um processo? Se sim, como?
Por exemplo,
como
screen
consegue anexar umascreen
sessão e os processos em execução a diferentes processos de shell? Existe mudança no processo pai?Parece que ouvi outras maneiras de alterar o processo do shell em que um programa está sendo executado, mas não me lembro. Também há alteração no processo pai do programa?
Eu pensei que
disown
um processo altera o processo pai do processo, simplesmente porque o nomedisown
implica isso. Mas descobri que não é verdade.O cliente Emacs pode se conectar ao servidor emacs em uma guia de terminal diferente. Existe mudança no processo pai?
getppid(2)
, uma chamada do sistema e chamadas do sistema são tratadas pelo kernel. Um programa pode ser confundido emitindo essa chamada, salvando o valor e, em seguida, usando esse valor após a alteração de seus pais. Há uma chance de uma condição de corrida aqui.
disown
apenas remove um determinado filho da lista interna de processos filhos de um shell. O PPID da criança permanece o da concha. O shell esqueceu que alguma vez iniciou esse filho, mas o kernel se lembra.