È possibile modificare il processo padre di un processo? Se si, come?
Per esempio,
come
screen
riesce a collegare unascreen
sessione e i processi in esecuzione al suo interno a diversi processi shell? C'è un cambiamento nel processo genitore?Mi sembra di aver sentito parlare di altri modi di cambiare il processo della shell in cui è in esecuzione un programma, ma non ricordo. C'è anche un cambiamento nel processo genitore del programma?
Ho pensato che
disown
un processo cambi il processo genitore del processo, semplicemente perché il nome lodisown
implica. Ma ho scoperto che non è vero.Il client Emacs può collegarsi al server emacs su una diversa scheda terminale. C'è un cambiamento nel processo genitore?
getppid(2)
, una chiamata di sistema e le chiamate di sistema sono gestite dal kernel. Un programma potrebbe essere confuso emettendo quella chiamata, salvando il valore e quindi usando quel valore dopo che la sua parentela è cambiata. C'è una possibilità di una condizione di gara qui.
disown
rimuove solo un determinato figlio dall'elenco interno dei processi figlio di una shell. Il PPID del bambino rimane quello della shell. La shell ha dimenticato di aver mai avviato quel figlio, ma il kernel ricorda.