PDA

View Full Version : [C (SO linux)]: SIGINT non ricevuta dai processi in background


cxrnvs
27-09-2004, 10:21
slve a tutti
sto scrivendo in C un piccolo demone per linux.
Questo programma, in quanto demone, lavora in background: il padre esegue una fork e termina subito lasciando lavorare il figlio.
Io voglio che alla pressione di CTRL+C dalla shell il demone termini immediatamente.
Purtroppo il segnale relativo alla CTRL+C (SIGINT) viene ricevuto solo dai processi in foreground....quindi il figlio non termina mai....non capisco perche' succeda questo... tramite la fork non si dovrebbero ereditare anche tutte le maschere relative ai segnali?

grazie a tutti coloro che interverranno.

ilsensine
27-09-2004, 10:52
Originariamente inviato da cxrnvs
Purtroppo il segnale relativo alla CTRL+C (SIGINT) viene ricevuto solo dai processi in foreground....quindi il figlio non termina mai....non capisco perche' succeda questo... tramite la fork non si dovrebbero ereditare anche tutte le maschere relative ai segnali?

Il problema non č se il child sia in grado o meno di gestire il segnale, ma il fatto che bash (che gestisce ctrl+c) invia il segnale al processo in foreground sulla sessione.
Puoi mandare direttamente il segnale con killall -INT <nome processo>. Occhio che cosė invii SIGINT a _tutti_ i processi con quel nome (quindi anche il padre o altre istanze del processo); se non č il comportamento che vuoi, usa kill -INT <pid del processo>.

cxrnvs
27-09-2004, 11:25
ok
killall - INT <nome> funziona perfettamente come volevo che funzionasse la CTRL+C (quindi non ero io che sbagliavo a settare l'handler del segnale).

grazie tante