minishell을 위해 이것저것 알아보던 중, 실제 쉘과 시스템콜이 어떤 순서로 어떻게 작동하는지 궁금해졌다. 이를 strace를 이용해 실험해보았다.
strace는 시스템콜과 시그널을 추적해주는 쉘 명령어이다. open, close, dup2, pipe, execve, fork 등 다양한 시스템콜이 어떻게 호출되는지를 확인할 수 있다.
linux에만 있는 듯하며, 대신 macos에는 dtruss와 같은 명령어가 있지만 관리자 권한이 필요하기에 그냥 도커를 이용하는 게 편하다.
다음은 준비과정이다.
GitHub - alexandregv/42toolbox: A bunch of scripts to make your life better at @42School
docker run -it --rm --cap-add SYS_PTRACE debian
(—rm 옵션은 종료시 자동으로 삭제해주는 옵션이기에 계속 이용할 것이라면 필요에 따라 제외하고 이용하자)
<aside> 💡 중요: docker 에서 strace를 이용하려면 —cap-add 옵션에 SYS_PTRACE를 추가해줘야한다.
</aside>
apt update && apt install -y man-db vim strace procps lsof
사실 strace만 있으면 되지만 편의를 위해 이것저것 설치했다. 이제 정말로 strace를 써보자.