4

C プログラムの関数内で費やされた時間を測定する DTrace スクリプトを作成しました。プログラム自体が実行され、いくつかのデータが出力されてから終了します。

問題は、プロセス ID を取得して DTrace を開始するのに時間がかかることです。

現時点では、DTrace を開始するのに十分な時間を与えるコード内に sleep() ステートメントがあります。情報を取得するためにコードを変更しなければならないということは、Dtrace の目的に反することになります...そうです。

基本的に私が求めているのは、プロセス ID が表示されるまで DTrace を待機させ、それに対してスクリプトを実行することです。

4

1 に答える 1

5

おそらく pid プロバイダーを使用していると思われます。その場合、プロセスが作成される前にこれらのプローブを有効にする方法はありません。これに対する通常の解決策は、「-c」オプションを使用して dtrace 自体からプログラムを呼び出すことです。

何らかの理由でそれができない場合 (つまり、他のプロセスによって設定された環境でプロセスを開始する必要がある場合)、より複雑なアプローチを試すことができます: proc:::start または proc:::exec- を使用します。プログラムが実際に開始されたときのトレースに成功し、stop() アクションを使用してその時点でプログラムを停止し、system() を使用して pid プロバイダを使用する別の DTrace 呼び出しを実行し、プログラムを再度「プルーニング」します。

于 2012-03-02T01:01:35.287 に答える