Est-il possible de changer le processus parent d'un processus? Si oui, comment?
Par exemple,
comment
screen
parvient-il à attacher unescreen
session et les processus en cours d'exécution à différents processus shell? Y a-t-il un changement de processus parent?Il me semble avoir entendu parler d'autres façons de changer le processus shell dans lequel un programme est en cours d'exécution, mais je ne me souviens pas. Y a-t-il également un changement de processus parent du programme?
J'ai pensé
disown
qu'un processus change le processus parent du processus, simplement parce que son nom l'disown
indique. Mais j'ai trouvé que ce n'était pas vrai.Le client Emacs peut se connecter au serveur emacs sur un onglet de terminal différent. Y a-t-il un changement de processus parent?
getppid(2)
, un appel système et les appels système sont gérés par le noyau. Un programme peut être confondu en émettant cet appel, en enregistrant la valeur, puis en utilisant cette valeur après que sa filiation a changé. Il y a une chance d'une condition de course ici.
disown
supprime simplement un enfant donné de la liste interne des processus enfants d'un shell. Le PPID de l'enfant reste celui de la coquille. Le shell a oublié qu'il n'a jamais démarré cet enfant, mais le noyau s'en souvient.