GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:un processo "subreaper"?

La parola "subreaper" è usata in alcune risposte. La ricerca su Google mostra anche voci in cui la parola è "appena usata".

Come faccio a capire cos'è un "submietitore"?

Risposta accettata:

Questo è stato implementato nel kernel Linux 3.4 come flag della chiamata di sistema prctl().

Dal prctl(2) pagina man:

[…] Un subreaper svolge il ruolo di init(1) per i suoi processi discendenti
. Al termine di un processo che è orfano (ovvero, il suo
genitore diretto è già terminato) e contrassegnato come avente un
submietitore, il più vicino submietitore antenato ancora in vita riceverà un SIGCHLD segnale ed essere in grado di wait(2) sul processo per scoprire il suo
stato di risoluzione.

Un processo può definirsi un subreaper con prctl(PR_SET_CHILD_SUBREAPER) . Se è così, non è init (PID 1) che diventerà il genitore dei processi figlio orfano, invece il nonno vivente più vicino contrassegnato come sub-mietitore diventerà il nuovo genitore. Se non c'è un nonno vivente, init fa.

Il motivo per implementare questo meccanismo era che i gestori/supervisori dei servizi dello spazio utente (come upstart , systemd ) devono tenere traccia dei servizi avviati. Molti servizi si demonizzano tramite double fork e vengono implicitamente re-parented al PID 1. Il gestore del servizio non sarà più in grado di ricevere il SIGCHLD segnala per loro e non è più incaricato di raccogliere i bambini con wait() . Tutte le informazioni sui bambini vengono perse nel momento in cui PID 1 ripulisce i processi di re-genitorialità. Ora, un processo di gestione dei servizi può contrassegnarsi come una sorta di "sub-init" ed è ora in grado di rimanere come genitore per tutti i processi orfani creati dai servizi avviati. Tutti i SIGCHLD i segnali saranno consegnati al gestore del servizio.

In Linux, un demone viene in genere creato eseguendo il fork due volte con il processo intermedio terminato dopo il fork del nipote. Questa è una tecnica comune per evitare i processi di zombi. Lo script init chiama un figlio. Quel bambino si biforca di nuovo e quindi esce immediatamente. Il nipote sarà adottato da init , che chiama continuamente wait() per raccogliere lo stato di uscita dei suoi figli per evitare gli zombi. Con il concetto di subreaper, il gestore del servizio spazio utente ora diventa il nuovo genitore, invece di init .


Linux
  1. Come installare vtop su Linux

  2. Introduzione ai thread di Linux – Parte I

  3. Come funziona il ciclo di vita dei processi Linux:processo padre, figlio e inizializzazione

  4. kill Esempi di comandi in Linux

  5. Stati del processo Linux

Come uccidere un processo in Linux

Comando Ps in Linux (Elenca processi)

Comando Pstree in Linux

Kill Command in Linux

Monitoraggio dei processi su Linux

Come KILL un processo su Linux