Linux bash 호출 추적

Linux bash 호출 추적

Linux에서 명령이 실행된 위치를 추적할 수 있는 방법이 있는지 궁금합니다.

예를 들어 스크립트를 호출하는 경우 프로그램이나 다른 bash 스크립트에서 시작된 것처럼 스크립트가 호출된 위치를 추적할 수 있는 방법이 있습니까?

답변1

스크립트가 bash로 작성된 경우 누가 스크립트를 호출했는지 알아내는 데 사용할 수 있는 $PPID(상위 프로세스 ID의 약자)라는 내장 변수가 있습니다. 예는 다음과 같습니다.

CALLER=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
echo I was called from $CALLER

설명:

  1. $PPID는 상위 프로세스(호출자)의 프로세스 ID를 제공합니다.
  2. 그만큼추신명령은 모든 프로세스를 나열합니다
  3. 그만큼grep명령은 줄 시작 부분에 PPID가 포함된 줄을 찾습니다.
  4. 그만큼명령은 호출자의 이름인 마지막 열만 인쇄합니다.

답변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/더 자세한 정보를 얻을 수도 있습니다.

관련 정보