Pregunta

Tenemos una pequeña aplicación demonio escrito en C durante un par de varias plataformas UNIX (este problema está ocurriendo en SunOS 5.10), que básicamente sólo se abre un puerto serie y luego capta información para venir en medio de dicho puerto.

En este caso particular, el demonio aparece para leer una sola transmisión (como el valor de un archivo de datos) enviados a través del puerto de serie, entonces recibe una SIGINT. Esto ocurre cada vez. Otros clientes utilizan esta configuración muy similar sin recibir el SIGINT. Es bastante obvio que los usuarios no están presionando Ctrl-C. Tenemos un manejador de señales relativamente simple en su lugar, por lo que sin duda sabemos que eso es lo que está sucediendo.

¿Qué otra cosa podría estar causando esto? Googlear alrededor y mirando a través de las preguntas aquí, no pude encontrar mucha explicación en cuanto a otras cosas que podrían causar un SIGINT. También busqué a través del código y encontré ninguna llamada para elevar () y sólo una sola llamada para matar (pid, 0), que no enviaría un SIGINT de todos modos.

Cualquier pensamiento o visión sin duda serán bienvenidos.

¿Fue útil?

Solución

Si no desea que el puerto serie para convertirse en el terminal de control para el proceso, abrirlo con el open O_NOCTTY bandera. Si se trata de la terminal de control los datos desde el puerto serie se pueden interpretar como una interrupción o de otro carácter especial.

Otros consejos

No dijiste cómo está conectado el controlador de señal, pero si usted es capaz de fijarla por medio de sigaction (2) con el fin de obtener una siginfo_t entonces parece que incluiría el pid que envió la señal (si_pid).

entrada de blog sobre la depuración de un problema con síntomas similares. Aunque dudo que sea el mismo tema, que tiene algunas sugerencias de depuración muy útil para averiguar el origen de las señales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top