20.3.4. SystemTap을 사용하여 애플리케이션의 시스템 호출 모니터링
SystemTap 툴을 사용하면 커널 이벤트에 대한 사용자 정의 이벤트 처리기를 등록할 수 있습니다. strace 와 비교하여 사용하기가 어렵지만 SystemTap 은 더 효율적이고 복잡한 처리 로직을 사용할 수 있습니다.
사전 요구 사항
절차
콘텐츠를 사용하여
my_script.stp
파일을 생성합니다.probe begin { printf("waiting for syscalls of process %d \n", target()) } probe syscall.* { if (pid() == target()) printf("%s(%s)\n", name, argstr) } probe process.end { if (pid() == target()) exit() }
모니터링할 프로세스의 프로세스ID(pid )를 찾습니다.
$ ps -aux
스크립트를 사용하여 SystemTap 을 실행합니다.
# stap my_script.stp -x pid
pid 값은 프로세스 ID입니다.
스크립트가 로드된 커널 모듈로 컴파일됩니다. 이렇게 하면 명령을 입력하고 출력을 가져오는 사이에 약간의 지연이 발생합니다.
- 프로세스에서 시스템 호출을 수행하면 호출 이름과 해당 매개 변수가 터미널에 출력됩니다.
-
프로세스가 종료되면 스크립트가 종료되거나
Ctrl+C
를 누르면 종료됩니다.
추가 리소스
- SystemTap Beginners 가이드
- SystemTap Tapset 참조
strace 기능과 근접한 더 큰 SystemTap 스크립트는
/usr/share/systemtap/examples/process/strace.stp
로 사용할 수 있습니다. 스크립트를 실행하려면 다음을 수행합니다.# stap --example strace.stp -x pid
또는
# stap --example strace.stp -c "cmd args …"