/etc/init.d/のどのスクリプトがプロセスを開始しますか?

/etc/init.d/のどのスクリプトがプロセスを開始しますか?

プロセスのPIDがあり、起動プロセス中にinitによって開始されたことがわかっているとします。これを開始するスクリプトの名前をどのように見つけることができますか?

1つの方法はrunを実行することですが、grep $PROCESS_NAME /etc/init.d/*このソリューションは完璧でも、非常にエレガントでもありません。

service --status-all別の方法は、サービスの1つが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 startPIDだけを知っているとスクリプトを見つけることができますか?/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

関連情報