Cosa sono i SIGPIPE?
SIGPIPE è il segnale di "tubo rotto", che viene inviato a un processo quando tenta di scrivere su un tubo la cui estremità di lettura si è chiusa (o quando tenta di scrivere su un socket che non è più aperto in lettura), ma non viceversa. L'azione predefinita è di terminare il processo.
Questo comportamento è utile per i casi tipici di processi in esecuzione in pipeline. Se eseguite foo | bar, allora non vedrete mai l'output di foo direttamente--diventa l'input di bar e vedrete l'output di bar. Questo significa che se, per esempio, bar muore, allora non ha senso che foo continui a produrre output. Questo può accadere sia perché bar ha fallito, o perché non ha più bisogno di input (per esempio, se sta scansionando il suo input per assicurarsi che non ci siano errori, può fermarsi dopo aver trovato il primo).
Immaginate cosa accadrebbe se SIGPIPE non esistesse, e bar morisse (a causa di un errore o perché ha semplicemente deciso di uscire). foo continuerebbe a funzionare, e dovrebbe ricevere un codice di errore al tentativo di scrivere. Potrebbe ignorarlo e continuare a funzionare, lasciando l'utente senza alcuna indicazione ovvia che la possibile condizione anormale di bar che termina per prima si è verificata. Quando pippo viene ucciso da SIGPIPE, la shell lo rileverà usando una delle funzioni wait(), e stamperà un messaggio "Broken pipe" o simile.
D'altra parte, se pippo muore per primo, questo è il solito caso; chiude l'estremità di scrittura, e quindi bar raggiungerà semplicemente EOF, e terminerà normalmente.
Articoli simili
- Cosa sono i numeri dati alle bande di rete come GSM 850/900/1800 e cosa significa?
- Di cosa sono fatte le onde EM? Cosa ondeggia?
- Cosa fanno alla dogana? Aprono il tuo pacco per vedere cosa c'è dentro?
- Cosa succede se ho usato una gomma magica sulla mia pelle? Cosa dovrei fare per togliere il bruciore?