A mensagem 'Falha de segmentação' vem sob STDERR?

16

Eu executei um executável em bash

./code > log

Ele mostra mensagens de erro ocasionais no terminal, enquanto todas as instruções printf entram no arquivo de log. Eu re-corro como abaixo

./code >& log

Agora, as mensagens de erro ocasionais também são registradas no log. Mas se houver uma falha de segmentação, ela ainda será mostrada no terminal. Por quê? Como fazer a mensagem Segmentation fault (core dumped) entrar no arquivo de log?

usuário $ bash --version

GNU bash, versão 4.2.24 (1) -release (i686-pc-linux-gnu)

    
por user13107 30.10.2012 / 08:14

2 respostas

14

Uma falha de segmentação é um sinal, se você não estiver capturando isso, seu programa será finalizado e seu shell irá imprimir isso em seu stderr (ao invés do stderr do seu programa).

É possível que o seu programa ou o shell executem ações específicas quando isso ocorre, seja pelo programa que captura o sinal ou pelo shell que captura o sinal SIGCHILD e depois verifica o status de saída do seu filho.

    
por 30.10.2012 / 08:22
16

A mensagem "falha de segmentação" é impressa em stderr, mas é o erro padrão do shell, não o erro padrão do programa. O shell imprime esta mensagem quando detecta que o programa foi finalizado devido a um sinal.

Você pode silenciar a mensagem redirecionando stderr em torno da parte do script de shell que executa o programa:

{ ./code; } >&log
    
por 31.10.2012 / 01:06