2011-06-25 8 views
6

Czy nowy rodzic zawsze "init" lub jest w jakiś sposób kontrolować, kto zostanie nowym rodzicem?ponowne rodzicielstwo procesu: kontrolowanie, kto jest nowym rodzicem

Wikipedia wydaje się wskazywać, że zawsze jest "init". Naprawdę mam nadzieję, że tak nie jest. Próbowałem wszystkiego, co wymyśliłem przy setpgid i setsid, ale bez powodzenia. A teraz, gdy widzę ten artykuł wikipedii, potrzebuję rady.

W uniksopodobnego system operacyjny dowolny osierocony proces będzie natychmiast przyjęta na specjalnym init procesowego. Ta operacja nosi nazwę ponownego rodzicielstwa i następuje automatycznie. Chociaż technicznie proces ma proces "init" jako jego obiekt nadrzędny, , to nadal jest nazywany procesem osieroconym , ponieważ proces, który pierwotnie stworzył , już nie istnieje. Taken from wikipedia

Powodem Pytam dlatego Robię aplikację Mac, który uruchamia wiele procesów roboczych. Chcę, aby te procesy robocze pojawiły się jako elementy podrzędne procesu głównego w hierarchii procesów task manager. Niektórzy pracownicy działają jako różni użytkownicy, aw systemie Mac OS X trzeba dwukrotnie się rozwidlić, aby przekazać uprawnienia procesowi podrzędnemu. Ponieważ "podwójnie rozwidlałem" robotników, którzy obecnie pracują jako deamons, i kiedy patrzę z menedżerem zadań widzę, że robotnicy mają "init" jako proces nadrzędny.

Odpowiedz

11

Osierocone dzieci są zawsze adoptowane przez init. Nie ma sposobu zmiany rodzica na jakiś proces nieinicjowany.


Od wersji Linux 3.4 nie jest to już ściśle prawda. Wciąż nie ma przenośnego sposobu uniksowego, ale Andy Lutomirski wskazuje na Linuksa 3.4 dodaje PR_SET_CHILD_SUBREAPER dla prctl.

W efekcie, subreaper spełnia rolę init(1) dla swoich procesów potomnych.

9

W systemie Linux można użyć PR_SET_CHILD_SUBREAPER, aby wskazać, że osieroceni potomkowie powinni zostać ponownie przyporządkowani do was zamiast do init.

Powiązane problemy