2010-06-27 9 views
9

Qualche idea su questo? C'è qualche tipo di coda di segnale, o viene lasciata cadere?Cosa succede se durante la gestione dei segnali in UNIX, lo stesso segnale viene inviato al programma?

Mentre siamo a questa domanda, è vero che i gestori del segnale dovrebbero fare il minimo lavoro possibile?

Ho letto da qualche parte che un gestore di segnale dovrebbe usare una pipe e scrivere solo un byte, indicando cosa dovrebbe fare il programma. Quindi da qualche altra parte il programma controlla periodicamente la pipe e le spedizioni si basano sul byte in essa contenuto. (Potrei aver frainteso)

Grazie, Boda Cydo.

risposta

8

Per rispondere alla seconda parte della domanda, "è vero che i gestori del segnale dovrebbero eseguire il minimo lavoro possibile?" la risposta è sì, perché c'è un insieme minimo di funzioni che sono "sicure per segnale asincrono" e quindi possono essere chiamate dai gestori di segnale. La sicurezza del segnale asincrono è una specie di forma migliorata di re-entrancy. Se foo() è sicuro segnale asincrono, ciò significa che è sicuro chiamare foo() all'interno di un gestore di segnale, anche se foo() era già in esecuzione quando il segnale è stato sollevato.

È possibile ottenere l'elenco completo delle funzioni di sicurezza segnale asincrono osservando la pagina man di sezione 7 per signal (man 7 signal). Chiamare qualsiasi funzione diversa da una di queste da un gestore di segnale, direttamente o indirettamente, richiama un comportamento indefinito.

L'approccio "scrivi un byte in un pipe" è un ottimo modo per gestire i segnali senza limitarsi alle funzioni di sicurezza del segnale asincrono, specialmente se il tuo programma è già orientato su un ciclo select.

7

Per rispondere alla prima parte della domanda, il valore predefinito è il seguente: Se è lo stesso segnale di quello attualmente gestito, il nuovo segnale viene bloccato (trattenuto in una coda) e consegnato quando il gestore ritorna. Se arriva un altro segnale, viene chiamato il gestore per il nuovo segnale. c.f. the glibc manual.

+0

Oppure l'azione predefinita per il segnale viene eseguita se il segnale non è gestito –

Problemi correlati