minishell을 위해 이것저것 알아보던 중, 실제 쉘과 시스템콜이 어떤 순서로 어떻게 작동하는지 궁금해졌다. 이를 strace를 이용해 실험해보았다.

strace는 시스템콜과 시그널을 추적해주는 쉘 명령어이다. open, close, dup2, pipe, execve, fork 등 다양한 시스템콜이 어떻게 호출되는지를 확인할 수 있다.

linux에만 있는 듯하며, 대신 macos에는 dtruss와 같은 명령어가 있지만 관리자 권한이 필요하기에 그냥 도커를 이용하는 게 편하다.

다음은 준비과정이다.

  1. 클러스터 맥에서 docker를 이용하는 방법은 아래 링크를 따라하면 편하다.

GitHub - alexandregv/42toolbox: A bunch of scripts to make your life better at @42School

  1. docker를 이용할 준비가 되었다면 아래와 같이 실행한다. (꼭 데비안일 필요는 없다)
docker run -it --rm --cap-add SYS_PTRACE debian

(—rm 옵션은 종료시 자동으로 삭제해주는 옵션이기에 계속 이용할 것이라면 필요에 따라 제외하고 이용하자)

<aside> 💡 중요: docker 에서 strace를 이용하려면 —cap-add 옵션에 SYS_PTRACE를 추가해줘야한다.

</aside>

  1. 기타 필요한 패키지들을 깔아준다.
apt update && apt install -y man-db vim strace procps lsof

사실 strace만 있으면 되지만 편의를 위해 이것저것 설치했다. 이제 정말로 strace를 써보자.