タイトルはそれを最もよく表しています。Linux では、 and おそらくorで簡単に実行できます。また、OSX Leopard から が削除されるまで、OSX では簡単でした。また、基盤となるシステム コール (afaik) も同様です。strace
lsof
/proc
truss
明らかなアプローチは でこの問題に取り組むことですが、悲しいことにdtrace
、イベントが発生したときにイベントをキャッチするため、私が理解している限りでdtrace
はうまくいきません。私の場合、ブロッキングシステムコールはすでに開始されています。ちなみに、これが解決できる場合は、修正したいと思いますdtrace
。
XcodeのInstrumentsには、プロセスのスタックの定期的なサンプルを取得することで同様のことを実現するモニターがあることがわかりました(それを行うためにどのシステムコールが依存しているかはわかりません!)、おそらくコマンドラインで同様のもので十分です(システム コールをラップするライブラリ コールまでのスタックを表示します)。私のユースケースに役立つように、この「サンプリングコマンドラインツール」は、スタック上で見つかった引数を見つけて解析し、ブロックされているファイル/ファイル記述子を特定するのに役立つ必要があります。
最後にもう 1 つ - Linux では、通常、通常のユーザーとしてこれを行うことができます (ptrace_scope
トリックがない場合)。OSX ソリューションが root を必要としないのも素晴らしいことです。