Saída de segfault ausente no terminal Linux ao executar com “&”

4

Estou depurando um aplicativo que precisa ser executado com outros componentes. Eu estou embrulhando tudo em um script:

#!/bin/bash 
./component1 > 1.log & 
./my_application & 
./component2 > 2.log &

Eu quero ver a saída no terminal, então não redirecionei a saída de my_application .

Acabou que my_application teve um segfault. Mas o mais estranho é que a linha de saída que reclama das informações de falha de segmentação não está imprimindo no meu terminal. Essa última linha está simplesmente faltando.

Se eu executar ./my_appliation sozinho em outro terminal, a saída funcionará bem. Eu vejo a última linha de "falha de segmentação"

Por que minha saída está ausente quando eu executo meu aplicativo com & ? Que diferença faz se eu adicionar & até o final do comando?

    
por CodeNoob 24.04.2012 / 02:04

2 respostas

1

A mensagem "Falha de segmentação" não é realmente escrita de ./my_applitation , mas do shell.

Quando você usa & após um comando, o shell irá executá-lo em segundo plano em um subshell, eu acho que a saída stderr dessa subshell é o que está sendo perdido.

Eu confirmo a mesma coisa aqui:

$ cat >segf.c <<EOF
int main(int argc, char *argv[]){
char *p;
p=0;
printf("%d", *p);
}
EOF
$ make segf
$ bash -c "./segf"
Segmentation fault
$ bash -c "./segf &"
$
    
por 24.04.2012 / 02:38
0

Talvez, a razão seja que ./component1, ./my_application, ./component2 é executado simultaneamente em seu script. Se eles usam os mesmos arquivos ou dispositivos em seu sistema, o segfault pode ser exibido.

    
por 24.04.2012 / 15:33