
Linux에서 명령이 실행된 위치를 추적할 수 있는 방법이 있는지 궁금합니다.
예를 들어 스크립트를 호출하는 경우 프로그램이나 다른 bash 스크립트에서 시작된 것처럼 스크립트가 호출된 위치를 추적할 수 있는 방법이 있습니까?
답변1
스크립트가 bash로 작성된 경우 누가 스크립트를 호출했는지 알아내는 데 사용할 수 있는 $PPID(상위 프로세스 ID의 약자)라는 내장 변수가 있습니다. 예는 다음과 같습니다.
CALLER=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
echo I was called from $CALLER
설명:
- $PPID는 상위 프로세스(호출자)의 프로세스 ID를 제공합니다.
- 그만큼추신명령은 모든 프로세스를 나열합니다
- 그만큼grep명령은 줄 시작 부분에 PPID가 포함된 줄을 찾습니다.
- 그만큼앗명령은 호출자의 이름인 마지막 열만 인쇄합니다.
답변2
"였다run from"은 실행된 실행 파일에 일부 로깅이 없으면 다소 어려울 것 같습니다. 실행이 완료되면 살펴볼 것이 많지 않을 것입니다.
그 경우~이다실행 중인 경우 간단히 를 사용하여 상위 프로세스 ID(PPID)에서 호출자에 대한 충분한 정보를 얻을 수 있습니다 ps
.
답변3
프로세스가 계속 실행 중인 경우 명령에서 제공하는 계층적 시각화(포리스트 또는 프로세스 트리라고도 함)를 사용할 수 있습니다 ps
.
예를 들면 다음과 같습니다.
ps xf
출력은 다음과 같습니다.
3627 ? Ss 0:00 /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
3655 ? S 0:38 \_ bwm --interface eth0 --download
3656 ? S 0:38 \_ bwm --interface eth0 --upload
3687 ? S 0:20 \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
574 ? S 0:00 | \_ sleep 1
3713 ? S 0:00 \_ wmiir read /event
3714 ? S 0:00 \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
22671 ? S 0:00 \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
22672 ? Ss 0:03 \_ xterm
22673 pts/0 Ss+ 0:00 \_ bash
답변4
Hai Vu의 답변으로 업그레이드 가능:
ps -p $PPID -o args=
출력은 상위 프로세스 ID로 제한 -p
됩니다 . ps
이를 -o
통해 자신만의 출력을 지정할 수 있으며, 이 경우에는 args=
내가 원하는 것을 제공합니다. 가능한 업그레이드는 많은 정보를 얻은 다음 이를 구문 분석하는 대신 ps
원하는 정보만 요청한다는 것입니다.
일단 가지고 있으면 "dirs" $PPID
를 살펴보고 /proc/$PPID/
더 자세한 정보를 얻을 수도 있습니다.