
私は、Gentoo 派生版で複雑な組み込み Linux ソフトウェアを実行していますが、このソフトウェアでは、特定のコードが約 84 分ごとに定期的に実行されます。このコードが実行される可能性のある場所を見つけるためにメイン コードをスキャンしましたが、失敗しましたcrontab
。また、考えられる原因もないように思われます。
質問です。問題のコードを変更することで、最初にどの他のプロセス/コード/ファイル/サービスがそれを開始したかを調べることは可能ですか? ディレクトリ内に/proc
使用できる情報はありますか? または、特定のコードを実行したプロセスを見つけるのは不可能ですか?
答え1
Chris の回答は、プロセスの存続期間が長く、検査する時間がある場合は有効ですが、実行時間が短いコマンドの場合は、プロセスが存続している間にそれをキャッチするのは難しい場合があります。
これを解決する別の方法は、プログラムの周囲に「ラッパー」を配置することです。
呼び出されるプログラムが であるとします/usr/bin/someprog
。
/usr/bin/someprog
へ引っ越す/usr/bin/someprog.orig
。/usr/bin/someprog
次のようなスクリプトとして 作成します。
#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
- その後
chmod a+x /usr/bin/someprog
これにより、プロセス ツリーがダンプされ、 に配置されます/tmp/someprog.log
。その後、ツリーを調べて、何がそれを生成しているかを見つけることができます。
答え2
親 PID (PPID) を探しているようです:
$ ps -o ppid -p 5743
PPID
219
あなたはまた、以下のことを述べている/proc
:
$ awk '{ print $4 }' /proc/5743/stat
219