Quando si tratta di segnali POSIX, si dispone di due mezzi a vostra disposizione. In primo luogo, il modo facile (ma deprecato), signal(). In secondo luogo, il modo più elegante, attuale ma complesso, sigaction(). Si prega di utilizzare sigaction() a meno che non si scopre che non è disponibile su alcune piattaforme su cui è necessario lavorare.
This chapter del manuale di glibc spiega le differenze tra i due e fornisce un buon esempio di codice su come utilizzare entrambi. Elenca anche i segnali che possono essere gestiti, raccomanda come devono essere gestiti e spiega come ogni dato segnale è (o non è) attualmente gestito. È molto più codice di quello che vorrei incollare in una risposta qui, quindi i collegamenti.
Vale davvero la pena l'ora o due che ti porterebbe a leggere i collegamenti e lavorare attraverso gli esempi. La gestione del segnale (specialmente nei programmi che demonizzano) è estremamente importante. Un buon programma dovrebbe gestire tutti i segnali fatali che possono essere gestiti (cioè SIGHUP) ed ignorare esplicitamente i segnali che potrebbero non essere utilizzati (ad esempio SIGUSR1/SIGUSR2).
Inoltre non farà male a studiare la differenza tra i segnali normali e in tempo reale, almeno fino alla comprensione di come il kernel fonde il precedente e non il secondo.
Una volta analizzato, probabilmente ti sentirai incline a scrivere un set di funzioni facile da modificare per gestire i segnali e riutilizzare quel codice più e più volte.
Ci scusiamo per non aver dato un frammento di codice rapido e sporco per mostrare come risolvere il bisogno immediato, ma questo non è un argomento rapido e sporco :)
fonte
2010-03-21 01:34:51
io non consiglierei questo. Ci sono pochissime istanze in cui posso pensare a dove sia una buona idea per un programma scavalcare la funzione kill di Ctrl-C - uno strumento di connessione remota come SSH che è uno di questi. –
Questo è solo per capire come gestire i segnali – Dave
Qualsiasi tipo di programma interprete dovrebbe catturare ctrl-C per interrompere il programma ospitato, se è in esecuzione. – Potatoswatter