Czy można zmienić proces macierzysty procesu? Jeśli tak to jak?
Na przykład,
jak
screenzarządza dołączeniemscreensesji 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
disownproces zmienia proces macierzysty procesu, po prostu dlatego, że nazwadisowntego 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.
disownpo 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.