2010-01-25 10 views
5

Tengo un problema al ejecutar un script bash desde C++ utilizando el comando de llamada al sistema. El script captura una señal SIGPIPE y sale con el código de retorno 141.¿Se recomienda atrapar SIGPIPE en script bash?

Este problema ha comenzado a aparecer solo en la última versión de mi código.

Mis preguntas son las siguientes:

  1. ¿Por qué hace esto ocurra SIGPIPE ahora y no ocurrió antes?
  2. ¿Es seguro ignorar el SIGPIPE y cuáles son las consecuencias?
+0

¿Puede publicar algunos fragmentos de código relevantes? – tur1ng

+0

Como se explica en las respuestas, hay una tubería rota en algún lugar y, por lo tanto, la señal 'SIPIPE'. Significa que algo está mal en la lógica que usas. No deberías ignorarlo. –

Respuesta

3

1) Eso es muy difícil de responder sin saber exactamente lo que ha cambiado.
2) Si aparece una secuencia de comandos en una canalización, y uno de los comandos de lectura finaliza antes de que el escritor haya finalizado, el escritor recibe una señal SIGPIPE. Entonces, si puedes ignorarlo depende de si ese es un comportamiento aceptable para tu script. Más información here

2

Un current version of the FAQ que PiedPiper asociados a los Estados:

A partir de bash-3.1, golpe del no informa errores SIGPIPE por defecto. Usted puede construir una versión de bash que informará dichos errores.

¿Es posible que haya cambiado las versiones Bash o la forma en que se creó y que haya causado el cambio de comportamiento en su código?