2010-01-25 16 views
5

Ho un problema durante l'esecuzione di uno script bash da C++ utilizzando il comando di chiamata di sistema. Lo script intercetta un segnale SIGPIPE ed esce con il codice di ritorno 141.È consigliabile intercettare SIGPIPE in bash script?

Questo problema è iniziato a comparire solo nell'ultima versione del mio codice.

Le mie domande sono le seguenti:

  1. Perché questo SIGPIPE verifica subito e non si è verificato prima?
  2. È sicuro ignorare SIGPIPE e quali sono le conseguenze?
+0

Puoi pubblicare alcuni frammenti di codice rilevanti? – tur1ng

+0

Come spiegato nelle risposte, c'è un tubo rotto da qualche parte e quindi il segnale 'SIPIPE'. Significa che c'è qualcosa di sbagliato nella logica che usi. Non dovresti ignorarlo. –

risposta

3

1) È molto difficile rispondere senza sapere esattamente cosa hai cambiato.
2) Se una sequenza di comandi viene visualizzata in una pipeline e uno dei comandi di lettura termina prima che lo scrittore abbia terminato, lo scrittore riceve un segnale SIGPIPE. Quindi, se puoi ignorarlo dipende dal fatto che sia un comportamento accettabile per il tuo script. Maggiori informazioni here

2

Un current version of the FAQ che PiedPiper legata a stati:

Come di bash-3.1, bash non segnala gli errori SIGPIPE per impostazione predefinita. Tu puoi creare una versione di bash che riporti tali errori.

È possibile che sia stata modificata la versione di Bash o il modo in cui è stata generata e ciò ha causato il cambiamento di comportamento nel codice?