Linuxでコマンド/コードが実行される理由をどのように知ることができますか?

Linuxでコマンド/コードが実行される理由をどのように知ることができますか?

私は、特定のコードスニペットが約84分ごとに定期的に実行されるGentoo派生バージョンで実行される複雑な組み込みLinuxソフトウェアを持っています。このコードが実行できる場所を見つけるために基本コードをスキャンすることは失敗し、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

関連情報