strace로 무언가를 캡처한 다음 즉시 종료하고 싶습니다. 이렇게 하면 프로그램이 계속 살아 있을 수 있습니다 strace ... program 2>&1 | grep --line-buffered ... | read line
.
strace 자체가 종료된 후 strace가 프로그램을 종료하도록 하는 쉬운 방법이 있습니까?
이것이 내가 해결한 방법입니다.
(strace ... program 2>&1 & echo $! >&3) 3>pid | grep --line-buffered ... | while read line; do
kill `<pid`
break
done
하지만 좋아 보이지는 않습니다.
고쳐 쓰다:
실제 문제는 내가 추적하고 있던 프로그램이 SIGPIPE를 무시하고 있다는 것이었습니다. 이 문제를 해결하는 깔끔한 방법은 SIGPIPE를 가로채고 SIGTERM을 보내는 추가 레이어를 만드는 것입니다.
답변1
grep이 지원하는 경우 grep -m 1 ...
이를 사용하여 일치하는 항목을 찾은 후 중지할 수 있습니다. 계속해서 쓴다고 가정하면 파이프가 닫히고 strace가 종료됩니다.