2014-12-11 8 views
3

주어진 프로세스에 대한 모든 파일 I/O를 추적하는 방법이 있습니까? 필자가 정말로 필요로하는 것은 주어진 프로세스에서 읽거나 쓰는 파일의 위치이다. (그리고 중요하지는 않지만 읽기 또는 쓰기 작업이라면 이상적이다.)Linux는 프로세스별로 액세스하는 모든 파일을 추적합니까?

필자는 기존 프로세스에 연결해야 할 필요없이 프로세스를 실행하고 추적 할 수 있다고 생각합니다. 거기에 파일 액세스를 모니터링하지만 프로세스를 실행할 수있는 래퍼 유틸리티의 종류가 있습니까?

+0

좋은 시작이다 (https://superuser.com/q/348738/241386) –

답변

5

선발로이 일을보십시오 :

당신의 특별한 요구를 들어

, 나에 대한 솔루션으로 제공 할 수 있는지 ...

lsof -p <PID> 

이 명령은 모든 파일, FD, 소켓을 열어 나열합니다 PHP 스크립트 모니터 :

: 더 나은 대안으로

php foo.php & _pid=$! 
lsof -r1 -p $_pid 
kill %1 # if you want to kill php script 

을, 나는 strace의 사용을 권장

strace -f -t -e trace=file php foo.php 

또는 이미 실행중인 프로세스에 대한:

strace -f -t -e trace=file -p <PID> 
+0

감사합니다 [파일/프로세스가 액세스를 열어 지속적으로 모니터링] 포인트! 이미 실행중인 프로세스에서 작동합니다. 나는 전체 실행을 위해 PHP 스크립트를 위해이 작업을 시도하고 있으며, 프로세스가 시작될 때까지 파일을 추적합니다. 도움을 보면 -r 반복 옵션이 있지만이 옵션은 주기적으로 열려있는 파일이 아닌 열려있는 파일을 검사하는 것 같습니다. 는 기본적으로 나는이 작업을 수행 할 수 : lsof를이 그 확실히 제공하는 것, 내 게시물을 편집 –

+0

에 의해 열려있는 파일을 나열하지 않는 것 foo.php -p $$ && 간부 인 PHP 더 많은 관련 정보와로드되는 모든 PHP 확장을 보여주는 스크립트에는 불행히도 file.txt는 출력에 나열되지 않습니다. file.txt의 내용을 인쇄하기 위해 스크립트를 수정하여 파일이 열리고 있는지 확인할 수 있지만 lsof의 출력에는 file.txt가 표시되지 않습니다. –

+0

감사를 참조 foo.php –

관련 문제