개요
strace는 특정 명령어를 실행하거나 이미 실행 중인 프로세스에 연결하여 해당 프로세스의 모든 시스템 호출과 시그널 이벤트를 실시간으로 출력합니다. 이는 파일 I/O, 네트워크 통신, 메모리 관리 등 프로그램의 저수준 동작을 이해하는 데 필수적입니다.
주요 기능
- 프로세스의 시스템 호출 및 시그널 추적
- 각 호출의 인자, 반환 값, 오류 코드 표시
- 실행 중인 프로세스에 연결하여 추적
- 자식 프로세스까지 함께 추적
- 특정 시스템 호출 또는 시그널 필터링
주요 옵션
strace는 다양한 옵션을 통해 추적 방식과 출력 형식을 세밀하게 제어할 수 있습니다.
기본 추적 옵션
출력 제어
필터링
생성된 명령어:
명령어를 조합해 보세요.
설명:
`strace` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
strace를 활용한 다양한 사용 예시입니다.
간단한 명령어 추적
strace ls
`ls` 명령어의 시스템 호출을 추적합니다.
추적 결과를 파일로 저장
strace -o date_trace.log date
`date` 명령어의 시스템 호출을 `date_trace.log` 파일에 저장합니다.
실행 중인 프로세스 추적
strace -p 12345
PID가 12345인 프로세스에 연결하여 시스템 호출을 추적합니다. (PID는 실제 프로세스 ID로 대체해야 합니다.)
자식 프로세스까지 추적
strace -f bash -c "echo Hello, strace!"
`bash` 셸에서 `echo` 명령어를 실행할 때, `bash`와 `echo` 모두의 시스템 호출을 추적합니다.
특정 시스템 호출만 필터링
strace -e trace=open,read,write cat /etc/hosts
`cat /etc/hosts` 명령어가 `open`, `read`, `write` 시스템 호출을 사용하는지 추적합니다.
시스템 호출 소요 시간 확인
strace -T ls
각 시스템 호출에 소요된 시간을 함께 출력합니다.
설치
strace는 대부분의 리눅스 배포판에 기본으로 포함되어 있지 않을 수 있습니다. 다음 명령어를 사용하여 설치할 수 있습니다.
Debian/Ubuntu
sudo apt update && sudo apt install strace
APT 패키지 관리자를 사용하여 설치합니다.
CentOS/RHEL 7
sudo yum install strace
YUM 패키지 관리자를 사용하여 설치합니다.
Fedora/RHEL 8+
sudo dnf install strace
DNF 패키지 관리자를 사용하여 설치합니다.
팁 & 주의사항
strace는 강력하지만, 사용 시 몇 가지 고려할 사항이 있습니다.
성능 영향
strace는 프로세스의 시스템 호출을 가로채기 때문에, 추적 대상 프로그램의 성능에 상당한 영향을 줄 수 있습니다. 특히 I/O가 많은 프로그램의 경우 더욱 그렇습니다. 프로덕션 환경에서는 주의해서 사용해야 합니다.
출력 해석
strace의 출력은 매우 방대할 수 있으므로, 필요한 정보만 필터링(-e)하거나 파일로 저장(-o)하여 분석하는 것이 좋습니다. 특정 시스템 호출에 대한 자세한 정보는 man 2 <syscall_name> 명령어로 확인할 수 있습니다.
권한
다른 사용자의 프로세스를 추적하거나 시스템 전반의 동작을 추적하려면 root 권한이 필요합니다.
디버깅 도구와의 차이
strace는 시스템 호출 수준에서 동작하며, gdb와 같은 디버거와는 달리 프로그램 내부의 변수나 함수 호출을 직접 조작하거나 스택 트레이스를 볼 수는 없습니다. 두 도구는 상호 보완적으로 사용될 수 있습니다.