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.