Mi è stato assegnato il compito di progettare un semplice web server usando C nel mio UNIX & Classe C Il server web ascolta e si biforca quando viene effettuata una connessione riuscita in modo che possano essere offerti più client contemporaneamente. Il processo figlio gestisce quindi la transazione tra client e server. Ora sono tenuto a implementare il codice che gestisce i segnali, in particolare SIGTERM e SIGQUIT.
Alla ricezione di uno di questi segnali, il programma deve segnalare la chiusura di eventuali bambini attivi. Se non rispondono in modo tempestivo, il programma deve quindi inviare il segnale SIGKILL per ucciderli. Suppongo che il "programma" in questo contesto si riferisca al processo genitore di tutti i bambini attivi (che credo sia il processo attivo prima dell'invocazione di fork ()). Suppongo anche che questi segnali debbano essere intrappolati. Quindi il mio piano è di avere un gestore del segnale per ognuno di essi.
Le mie domande sono: 1. Come posso segnalare a tutti i bambini attivi di terminare? 2. Come fa il genitore a sapere quando i processi figli sono terminati (e quindi sanno quando inviare il segnale KILL)?
Le mie uniche riflessioni sulla risposta alla prima domanda è di usare un gestore di segnali per impostare un flag che a sua volta reindirizza il flusso di esecuzione all'interno del codice esclusivo figlio e non influenza il genitore. L'unico problema però è che il bambino potrebbe essere al momento al servizio di un client e quindi non verrà immediatamente terminato fino a quando non raggiunge il flag.
Qualsiasi aiuto è molto apprezzato