개요
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`와 같은 디버거와는 달리 프로그램 내부의 변수나 함수 호출을 직접 조작하거나 스택 트레이스를 볼 수는 없습니다. 두 도구는 상호 보완적으로 사용될 수 있습니다.