지속적으로 실행되는 프로세스를 추적하는 방법은 무엇입니까?

지속적으로 실행되는 프로세스를 추적하는 방법은 무엇입니까?

zsh그래서 , .xinitrc, .xprofile, 로 파일이 어떻게 .zprofile열리는 지 정확한 순서를 알고 싶습니다 . 그래서 나는 strace시스템 호출이 어떻게 호출되는지 확인하기 위해 해당 명령을 가지고 놀기로 결정했고 궁극적으로 이 파일을 로드하는 방법을 결정하고 주문할 수 있었습니다.zshgrepopen

내 명령:

strace zsh | grep open

하지만 이 프로그램을 실행하면 계속 출력이 표시되고 zsh작동 grep하지 않습니다. 프로세스를 종료해도 ctrl+d아무 일도 일어나지 않습니다 .

grep그렇다면 이런 과정에서 그러한 결과를 얻을 수 있는 방법이 있을까요 ?

답변1

strace기본적으로 출력을 stderr로 보냅니다.

여기에서 다음을 수행할 수 있습니다.

strace -o >(grep --color open >&2) zsh

이름, 매개변수 또는 런타임 시 반환 값의 zsh모든 시스템 호출을 보거나 다음을 수행합니다.open

strace -e /open zsh

(의 약어 strace -e trace=/open zsh) 또는:

이름에 포함된 시스템 호출을 살펴보세요 open(예: open, openat, pidfd_open, mq_open, open_by_handle_at, perf_event_open. 목록은 시스템 및 버전에 따라 정확하지 않을 수 있습니다).

또는:

strace -e open,openat zsh

이 두 시스템 호출에만 적용됩니다.

이 출력은 쉘의 프롬프트 및 명령 출력과 함께 터미널로 전송됩니다. 나중에 검사할 수 있는 파일로 보내거나 별도의 터미널 또는 screen/ tmux창으로 보내는 것을 선호할 수도 있습니다.

strace -o >(grep --color open > strace.log) zsh
strace -e /open -o strace.log zsh

하위 프로세스 및 해당 하위 프로세스에서 실행되는 명령을 포함하여 하위 프로세스에서 수행된 호출을 추적하려면 이 -f옵션이 필요합니다.

~/.xinitrc따라서 시스템을 여는 요소 (그리고 그것과 아무 관련이 없음 zsh)와 이를 사용할 수 있는 시기 audit(시스템에 기본적으로 설치/활성화되지 않을 수 있음)를 살펴보십시오 .

관련 정보