Domanda

Abbiamo una piccola applicazione demone scritto in C per un paio di diverse piattaforme UNIX (questo problema sta accadendo in SunOS 5.10), che in fondo si apre solo su una porta seriale e poi ascolta per informazioni a venire in via detto porto.

In questo caso particolare, il demone sembra di leggere una sola trasmissione (come la pena di un file di dati) inviati tramite tramite la porta seriale, quindi riceve un SIGINT. Questo accade ogni volta. Altri clienti utilizzano questa configurazione molto simile senza ricevere il SIGINT. Ovviamente, gli utenti non premendo CTRL-C. Abbiamo un gestore di segnale relativamente semplice a posto, quindi abbiamo sicuramente sappiamo che questo è ciò che sta accadendo.

Che altro potrebbe essere la causa? Googling intorno e guardando attraverso le domande qui, non ho potuto trovare molte spiegazioni da altre cose che potrebbero causare un SIGINT. Ho anche guardato attraverso il codice e ho trovato nessuna chiamata per aumentare () e solo una singola chiamata per uccidere (pid, 0) che non avrebbe mandato un SIGINT comunque.

Ogni pensiero o intuizione sarebbe sicuramente apprezzato.

È stato utile?

Soluzione

Se non si desidera che la porta seriale per diventare il terminale di controllo per il processo, aprirlo utilizzando il open bandiera O_NOCTTY. Se è il terminale di controllo, dati dalla porta seriale possono essere interpretati come interrupt o altro carattere speciale.

Altri suggerimenti

non ha detto come il vostro gestore di segnale è collegato, ma se siete in grado di fissarlo utilizzando sigaction (2) in modo da ottenere un siginfo_t allora sembra proprio che includerebbe il PID che ha inviato il segnale (si_pid).

post del blog sul debug di un problema con sintomi simili. Mentre Dubito che sia lo stesso problema, è ottenuto alcuni consigli di debug molto utili per rintracciare l'origine dei segnali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top