
예를 들어, 프로그램이 있고 파일 시스템 활동(어떤 파일/디렉토리가 생성/수정/삭제되는지 등)을 모니터링하고 싶습니다. 이 프로그램은 추가 프로세스를 생성할 수 있으므로 다음 활동을 얻고 싶습니다. 이러한 생성된 프로세스도 마찬가지입니다.
이 작업을 수행하려면 어떻게 해야 합니까?
답변1
당신이 사용할 수있는strace
이를 위해:
strace -f -e trace=file command args...
strace
시스템 호출을 추적하고 발생 시 이에 대한 설명을 표준 오류에 인쇄합니다. 이 -f
옵션은 하위 프로세스와 스레드도 추적하도록 지시합니다. -e
추적할 호출을 수정할 수 있습니다. , 등 -e trace=file
의 모든 사용을 기록 하지만 파일이 아닌 작업은 기록하지 않습니다.open
unlink
파일에서 읽고 쓴 내용을 보려면 -e trace=file,read,write
대신 으로 변경하십시오. 거기에서 조사하고 싶은 추가 호출도 나열할 수 있습니다. 해당 인수를 완전히 생략하면 모든 시스템 호출이 발생합니다.
출력은 다음과 같습니다( mkdir /tmp/test
추적된 쉘에서 실행했습니다).
[pid 1444] execve("/usr/bin/mkdir", ["mkdir", "/tmp/test4"], [/* 33 vars */]) = 0
[pid 1444] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
[pid 1444] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] mkdir("/tmp/test", 0777) = 0
[pid 1444] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1444, si_status=0, si_utime=0, si_stime=0} ---
를 사용하면 터미널 대신 파일에 기록할 수 있고 -o filename
, -v를 사용하면 출력을 (심지어) 더 자세하게 만들 수 있습니다. -p PID
더 유용한 경우에는 를 사용하여 이미 존재하는 프로세스에 연결할 수도 있습니다 .
직접 검사하기보다는 프로그래밍 방식으로 이 작업을 수행하려는 경우ptrace
부르다, 이것이 strace
기반입니다.