Linux でコマンド/コードが実行された理由を調べるにはどうすればよいでしょうか?

Linux でコマンド/コードが実行された理由を調べるにはどうすればよいでしょうか?

私は、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

関連情報