O que são SIGPIPE?
SIGPIPE é o sinal de "tubo quebrado", que é enviado para um processo quando tenta escrever em um tubo cujo fim de leitura foi fechado (ou quando tenta escrever em um soquete que não está mais aberto para leitura), mas não o inverso. A ação padrão é terminar o processo.
Este comportamento é útil para casos típicos de processos em execução em pipelines. Se você rodar foo | bar, então você nunca poderá ver a saída de foo diretamente--- torna-se a entrada para bar e você verá a saída do bar. Isto significa que se, por exemplo, o bar morre, então não faz sentido o foo continuar a produzir a saída. Isto pode acontecer ou porque o bar falhou, ou porque não precisa mais de input (por exemplo, se ele está escaneando seu input para ter certeza que não há erros, ele pode parar depois de encontrar o primeiro).
Imagine o que aconteceria se o SIGPIPE não existisse, e o bar morreu (seja por causa de um erro ou porque ele simplesmente decidiu sair). foo continuaria rodando, e ele teria que receber um código de erro ao tentar escrever. Ele poderia ignorar isso e continuar rodando, deixando o usuário sem nenhuma indicação óbvia de que a possível condição anormal de terminar a barra primeiro tenha ocorrido. Quando foo é morto pelo SIGPIPE, a shell irá detectar isso usando uma das funções de espera(), e imprimir uma mensagem "Broken pipe" ou similar.
Por outro lado, se foo morre primeiro, este é o caso usual; ele fecha a extremidade de escrita, e então o bar irá simplesmente alcançar a EOF, e terminar normalmente.
Artigos semelhantes
- O que são bons jogos de FPS que não são "baseados em contracções" e são melhores para pessoas mais velhas com reflexos mais lentos?
- É difícil usar a câmera para vlogs? Quais são algumas sugestões para câmeras baratas que são de qualidade e não são difíceis de usar?
- Quem são os índios vermelhos e porque são chamados assim? Quais são as suas origens?
- De que são feitas as ondas EM? Do que é que são as ondas EM?