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.
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.
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.
Tags process shell strace shell-script