プロセスの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 start
PIDだけを知っているとスクリプトを見つけることができますか?/etc/init.d/somedeamon
somedeamon
答え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
。