strace가 쓰는 파일을 캡처하기 위해 프로그램에 strace를 연결하고 싶다고 가정해 보겠습니다. 기존 PID가 필요합니다. strace를 연결하면 그때쯤에는 스크립트가 파일을 작성했을 수 있으며 나는 그 파일을 놓칠 것입니다. 고전적인 경주 조건. 지금 내가 하고 있는 일은 sleep 1
전체 추적을 얻기 위해 이전에 명령을 실행하는 것 외에는 아무것도 하지 않는 원본 스크립트를 실행하는 또 다른 프로그램을 만드는 것입니다 . 이건 나쁜 것 같아요. 많은 수의 스크립트를 실행하면 성능 문제가 발생할 수 있습니다. 하지만 기존 PID 없이는 strace를 연결할 수 없습니다. 또는?
답변1
strace
스크립트를 실행 시 원본 스크립트를 시작하는 래퍼로 바꾸세요 . 여기에는 다음이 포함될 수 있습니다.
mv yourscript /somewhere/else/yourscript
그러면 yourscript
된다
#!/bin/sh
OUTPUT_TO=`mktemp /tmp/yourscript.$$.XXXXXXXXXX` || exit 1
exec strace -o $OUTPUT_TO ... /somewhere/else/yourscript "$@"
필요한 ...
다른 매개변수는 어디에 있습니까 ?strace
대안으로, sysdig
프로세스 ID나 래퍼 스크립트 없이도 파일 이름이나 사용자 이름으로 추적할 수 있으므로 다음을 고려하십시오.
sysdig -p '%fd.name' proc.name contains yourscript