/etc/init.d/의 어떤 스크립트가 프로세스를 시작합니까?

/etc/init.d/의 어떤 스크립트가 프로세스를 시작합니까?

프로세스의 PID가 있고 부팅 프로세스 중에 init에 의해 시작되었다는 것을 알고 있다고 가정합니다. 이를 시작하는 스크립트의 이름을 어떻게 찾을 수 있나요?

한 가지 방법은 run 을 실행하는 것이지만 grep $PROCESS_NAME /etc/init.d/*이 솔루션은 완벽하지도 않고 매우 우아하지도 않습니다.

service --status-all또 다른 방법은 서비스 중 하나가 PID를 반환할 가능성이 가장 높은 를 실행하는 것입니다 . 그러나 이는 이전 솔루션보다 덜 우아합니다.

편집하다:

운영 체제는 RedHat/Ubuntu입니다.

다음과 같이 PID 2083으로 sshd가 실행되고 있다고 가정합니다.

UID        PID  PPID  C STIME TTY          TIME CMD
root      2083     1  0  2012 ?        00:00:00 /usr/sbin/sshd -D

그 부모가 init나와 함께 있어추측하다시작하는 동안 명령을 사용하여 시작되지만 복잡한 시작 명령이나 난독화로 인한 스크립트 service sshd start와 같이 추측하기 쉽지 않은 경우 PID만 알면 어떻게 스크립트를 찾을 수 있습니까?/etc/init.d/somedeamonsomedeamon

답변1

PPID 체인을 역으로 추적하는 쉬운 방법은 다음 pstree도구를 사용하는 것입니다.

pstree -p PID

그러면 지정된 PID에 대한 모든 상위 프로세스가 표시됩니다. 예를 들면 다음과 같습니다.

$ pstree 42284
-+= 00001 root /sbin/launchd
 \-+= 00199 jack /sbin/launchd
   \-+= 00254 jack /Applications/iTerm.app/Contents/MacOS/iTerm -psn_0_90134
     \-+= 00309 root login -fp jack
       \-+= 00310 jack -bash
         \--= 42284 jack vim site.txt

답변2

관심 있는 프로세스에서 역방향으로 PPID 체인을 추적할 수 있어야 합니다. 그러나 A가 B를 시작하고 B가 C를 시작하고 B가 완료되면 C의 상위 프로세스는 이제 init(PID 1)입니다. 프로세스의 PID에 대한 정보에 액세스하려면 를 실행해야 합니다 ps -l -pPID.

관련 정보