Słowo „subreaper” jest używane w niektórych odpowiedziach. Wyszukiwarka Google wyświetla również wpisy, w których słowo to jest „tylko używane”.
Jak mogę zrozumieć, co to jest „subreaper”?
process
linux-kernel
process-management
kenchew
źródło
źródło
Odpowiedzi:
Zostało to zaimplementowane w jądrze Linuksa 3.4 jako flaga wywołania systemowego prctl () .
Z strony
prctl(2)
podręcznika:Proces może definiować się jako podrzędny za pomocą
prctl(PR_SET_CHILD_SUBREAPER)
. Jeśli tak, to nieinit
PID 1 stanie się rodzicem osieroconych procesów potomnych , zamiast tego najbliższy żyjący dziadek oznaczony jako podrzędny zostanie nowym rodzicem. Jeśli nie ma żyjącego dziadka, toinit
robi.Powodem wdrożenia tego mechanizmu było to, że menedżerowie / przełożeni usług przestrzeni użytkownika (jak
upstart
,systemd
) muszą śledzić swoje uruchomione usługi. Wiele usług demonizuje się przez podwójne rozwidlenie i pośrednio zostaje ponownie nadanych do PID 1. Menedżer usług nie będzie już mógł odbieraćSIGCHLD
dla nich sygnałów i nie będzie już odpowiedzialny za zbieranie dzieciwait()
. Wszystkie informacje o dzieciach są tracone w chwili, gdy PID 1 oczyszcza ponownie wychowane procesy. Teraz proces menedżera usług może oznaczać się jako swego rodzaju „podinicjalizacja” i może pozostać nadrzędny dla wszystkich osieroconych procesów utworzonych przez uruchomione usługi. WszystkieSIGCHLD
sygnały zostaną dostarczone do kierownika serwisu.W systemie Linux demon jest zwykle tworzony przez rozwidlenie dwukrotnie, a proces pośredni kończy się po rozwidleniu wnuka. Jest to powszechna technika pozwalająca uniknąć procesów zombie . Skrypt init wywołuje dziecko. To dziecko znów się rozwidla i natychmiast wychodzi. Wnuk zostanie adoptowany przez
init
, który stale wzywawait()
do odebrania statusu wyjścia swoich dzieci, aby uniknąć zombie. Dzięki koncepcji podrzędnych menedżer usług przestrzeni użytkownika staje się teraz nowym nadrzędnym zamiastinit
.źródło