短期プロセス追跡

短期プロセス追跡

私のアプリケーションの1つで生成された短期プロセスの動作を理解しようとしています。私が理解したプロセスは次のとおりです。

  1. プロセス名の一部です。
  2. このプロセスを生成するアプリケーションの名前とPID。
  3. おおよそのプロセスが始まる時間です(5〜10分以内)。
  4. プロセスが終了した後のプロセスのPID。

理想的には:

  1. カーネル(または他のもの)がプロセスが開始されたことをスクリプトに通知します。
  2. プロセスに対して複数のツール(iostat、straceなど)を実行します。

プロセスが開始されたことをカーネルに知らせるようにして、私がこれに対処できるようにする方法はありますか?

そんな風に走るのはwhile true; do ps -ef | grep ${MY_PROCESS_NAME}; done酷くてひどいようです。無差別代入検索ではなく、このようなことが発生したときに通知を受け取ることができたらと思います。

それとも、親プロセスとすべての子プロセスに対してこれらのツールを実行してから、後で出力をフィルタリングしますか?たとえば、strace -ff -o ./some.trace -p ${PARENT_PID}

ベストアンサー1

一度見てみたいかもしれませんモニタリングの実行(カーネルが通常CONFIG_FTRACEで構成されていると仮定します。)これは、Brendan Gregg Tracking and Performance Collectionの多くのスクリプトの1つです。引数がない場合は、起動時にシステム上のすべてのコマンドを表示したり、正規表現を提供して監視できます。

zshたとえば、開始できる既存のコマンドまたは新しいコマンドを見つけるには、次のようにします。

sudo /opt/perf-tools-master/bin/execsnoop zsh

新しいzshを起動すると、次の出力が表示されます。

Tracing exec()s issued by process name "zsh". Ctrl-C to end.
Instrumenting sys_execve
   PID   PPID ARGS
 21920  21919 /usr/libexec/grepconf.sh -c
 21923  21922 /usr/bin/tty -s
 21922  21919 /usr/bin/tput colors
 21924  21919 /usr/bin/dircolors --sh /etc/DIR_COLORS.256color
 21925  21919 /usr/bin/grep -qi ^COLOR.*none /etc/DIR_COLORS.256color
 21926  21919 /usr/libexec/grepconf.sh -c
 21928  21919 /usr/libexec/grepconf.sh -c
 21930  21919 uname -m
 21932  21919 /bin/grep -q /usr/lib64/qt-3.3/bin
 21934  21933 /usr/bin/id -u

実行中のプログラムのフルネームがわかったら、通常はフックを追加してから元のプログラムを実行するスクリプトでファイルを置き換えます。これを行うことができない場合は、同様の方法を使用して、fanotify(7)開いている各ファイルが完了する前にスヌーピングプログラムに介入させることができます。あるいは、プロセスにinotifywatch追加するのに十分な速さがあります。strace

おすすめ記事