Czy można zmienić proces macierzysty procesu? Jeśli tak to jak?
Na przykład,
jak
screen
zarządza dołączeniemscreen
sesji i procesów w niej działających do różnych procesów powłoki? Czy nastąpiła zmiana procesu macierzystego?Wydaje mi się, że słyszałem o innych sposobach zmiany procesu powłoki, w których działa program, ale nie pamiętam. Czy jest także zmiana procesu macierzystego programu?
Myślałem, że
disown
proces zmienia proces macierzysty procesu, po prostu dlatego, że nazwadisown
tego sugeruje. Ale stwierdziłem, że to nieprawda.Klient Emacs może podłączyć się do serwera emacs na innej karcie terminala. Czy nastąpiła zmiana procesu macierzystego?
getppid(2)
, wywołuje system, a wywołania systemowe są obsługiwane przez jądro. Program można pomylić, wydając to wywołanie, zapisując wartość, a następnie używając tej wartości po zmianie jego pochodzenia. Istnieje tutaj szansa na wyścig.
disown
po prostu usuwa dane dziecko z wewnętrznej listy procesów potomnych powłoki. PPID dziecka pozostaje w powłoce. Powłoka zapomniała, że kiedyś zaczęła to dziecko, ale jądro to pamięta.