A maneira mais elegante de terminar o programa straced

1

Eu quero capturar uma certa coisa com strace e, em seguida, sair imediatamente. Desta forma, o programa permanece ativo: strace ... program 2>&1 | grep --line-buffered ... | read line .

Existe uma maneira simples de fazer strace matar o programa depois que a própria strace é terminada?

É assim que eu trabalho:

(strace ... program 2>&1 & echo $! >&3) 3>pid | grep --line-buffered ... | while read line; do
    kill '<pid'
    break
done

Mas não parece muito bom.

UPD:

Descobri que o problema real é que o programa que eu rastreio ignora o SIGPIPE. Eu acho que uma maneira limpa de contornar isso é criar uma camada adicional que intercepte o SIGPIPE e envie SIGTERM.

    
por John Smith 25.02.2016 / 15:37

1 resposta

0

Se o seu grep suportar, você pode usar grep -m 1 ... para fazer com que pare depois de encontrar a correspondência. Isso fará com que o tubo feche e a faixa morra, supondo que continue a escrever.

    
por 25.02.2016 / 17:28