GNU/Linux >> Linux Esercitazione >  >> Linux

Come far morire il processo figlio dopo che il genitore è uscito?

Il bambino può chiedere al kernel di consegnare SIGHUP (o altro segnale) quando il genitore muore specificando l'opzione PR_SET_PDEATHSIG in prctl() syscall in questo modo:

prctl(PR_SET_PDEATHSIG, SIGHUP);

Vedi man 2 prctl per i dettagli.

Modifica:questo è solo per Linux


L'ho ottenuto in passato eseguendo il codice "originale" nel "figlio" e il codice "generato" nel "genitore" (ovvero:inverti il ​​senso abituale del test dopo fork() ). Quindi intrappola SIGCHLD nel codice "generato"...

Potrebbe non essere possibile nel tuo caso, ma carino quando funziona.


Sto cercando di risolvere lo stesso problema e poiché il mio programma deve essere eseguito su OS X, la soluzione solo per Linux non ha funzionato per me.

Sono giunto alla stessa conclusione delle altre persone in questa pagina:non esiste un modo compatibile con POSIX per notificare a un bambino la morte di un genitore. Quindi ho escogitato la cosa migliore da fare:far sondare il bambino.

Quando un processo genitore muore (per qualsiasi motivo), il processo genitore del figlio diventa il processo 1. Se il figlio esegue semplicemente il polling periodicamente, può controllare se il suo genitore è 1. Se lo è, il figlio dovrebbe uscire.

Non è eccezionale, ma funziona ed è più semplice delle soluzioni di polling socket/lockfile TCP suggerite altrove in questa pagina.


Linux
  1. Linux:come rendere un processo invisibile agli altri utenti?

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

  3. Come imposto la directory di lavoro del processo genitore?

  4. Come tenere traccia del processo figlio usando strace?

  5. Il processo figlio riceve il SIGINT del genitore

Come visualizzare i PPID in Linux

Come uccidere il processo di zombi

Come ottenere il processo figlio dal processo padre

Come faccio a eseguire il fork di un processo che non muore quando la shell esce?

Come rendere persistenti le interfacce tap dopo il riavvio?

In che modo copy-on-write in fork() gestisce più fork?