0

私は dtrace の初心者です

コード
sudo dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }

を実行すると、別のコンソールで cat filename を実行します。しかし、コンソールには表示するものは何もありません。

環境:
OS x 10.8.4
dtrace: Sun D 1.6.2

いくつか設定する必要がありますか? それを解決する方法?

デモ画像

4

2 に答える 2

1

そのパーティにはもう出遅れましたが、ルート シェルをスポーンする代わりにできることは次のとおりです。

profileCtrl-c-ing sudo を実行すると出力バッファー (したがって出力) が失われるため、プロバイダーを使用して結果をダンプするようにスクリプトを書き直すことができます。

プロファイル プロバイダーは、一定の指定された時間間隔ごとに発生する時間ベースの割り込みに関連付けられたプローブを提供します。

dtrace -s /dev/stdin

syscall::read:entry /execname != "dtrace"/ 
{
    @reads[execname, fds[arg0].fi_pathname] = count();
}
profile:::tick-2sec
{
    printa(@read);
    trunc(@read);
}

Ctr-d

ここに画像の説明を入力

私はブレンダンの答えに同意しますが、私はかなりずさんで無知なチャップであり、遅かれ早かれそのルートシェルの使用に取り組むことになるため、永続的なルートシェルで作業することは常に避けようとしますが、これは悪い考えです.

MacOS X の開発者がこの sudo の問題をすぐに修正してくれることを願っています。

さらに、sudo が dtrace の動作を妨げると主張する人が何人かいますが、私は言いたいです。ctrl-cを使用して生成されたプロセスからファイル記述子が失われたことを除いて、私はその問題に遭遇したことはありません。

于 2013-07-21T11:51:52.820 に答える