strace에 대한 -D 옵션을 이해하는 데 문제가 있습니다. strace 매뉴얼 페이지는 다음과 같이 말합니다.
-D 추적 프로세스의 상위 프로세스가 아닌 독립적인 손자로서 추적 프로세스를 실행합니다. 이는 피추적자를 호출 프로세스의 직접적인 하위 항목으로 유지함으로써 strace의 가시적인 영향을 줄입니다.
"추적자 프로세스"는 strace를 실행하는 프로세스입니까?
"호출 프로세스"가 "추적 프로세스"의 상위 프로세스입니까?
-D가 없고 -D가 있는 추적기, 추적 대상 및 호출 프로세스 간의 상위-하위 관계는 무엇입니까?
감사해요!
답변1
추적 프로세스는 실행 중인 프로세스입니다 strace
. 그렇습니다. 호출 프로세스는 시작된 프로세스 strace
, 일반적으로 쉘입니다.
그렇지 않은 경우 -D
추적된 프로세스의 상위 프로세스는 다음과 같습니다 strace
.
strace sleep 120
pstree
다음 과 같이 표시됨
-───zsh───strace───sleep
이를 통해 -D
자체적 으로 분리되어 결국 strace
내 시스템에서 내 사용자 프로세스 systemd
의 부모가 다시 되었습니다.
|-systemd-+-(sd-pam)
...
| |-gnome-terminal--+-3*[zsh]
| | |-zsh---sleep
...
| |-strace
이 옵션의 효과는 -D
다음 항목에 간략하게 설명되어 있습니다.매뉴얼 strace
페이지:
getppid()
추적된 프로세스와 해당 상위 간의 상위-하위 관계(신호 중지 알림, 값 등)는 사용하지 않는 한 유지되지 않습니다 .-D
다음으로 실행한다는 -D
것은 하위 프로세스가 호출될 때 예상되는 상위 프로세스를 찾고 중지 했다가 계속할 때 하위 프로세스가 올바르게 작동하도록 getppid()
한다는 의미입니다. 이는 프로세스와 해당 자식 사이를 보간할 SIGCHLD
때 strace
, 해당 자식이 부모를 찾아야 하는 경우 중요할 수 있습니다.