次へ」ps出力にないプロセスにstraceをどのように接続しますか?」
半停止プロセスをデバッグしようとしています。
strace -f
親プロセスを使用して、複数のスレッドが表示されることを確認できました。
# strace -p 26334
Process 26334 attached - interrupt to quit
epoll_wait(607, {}, 4096, 500) = 0
epoll_wait(607, {}, 4096, 500) = 0
epoll_wait(607, {}, 4096, 500) = 0
epoll_wait(607, {}, 4096, 500) = 0
epoll_wait(607, ^C <unfinished ...>
Process 26334 detached
さらなる調査:
# readlink /proc/26334/fd/607
anon_inode:[eventpoll]
私の直感では、いくつかのスレッドをデッドロックに陥ることができましたが、epoll
これから進むのに十分な知識がないと言います。これらのスレッドが何をポーリングするのか、またはこのepoll記述子がどのファイル記述子にマップされているのかについての洞察を提供できるコマンドはありますか?
答え1
この行を実行すると、strace
システム機能が返されます。明確でない場合は、epoll_wait()
次のことができます。man epoll_wait
次のように実装の詳細を学びます。
epoll_wait, epoll_pwait - wait for an I/O event on an epoll file descriptor
説明epoll
:
epoll API は poll(2) と同様の操作を行います。つまり、複数のファイル記述子を監視して、I/O に使用できるファイルがあるかどうかを確認します。 epoll API はエッジトリガまたはレベルトリガインターフェイスとして使用でき、監視される多数のファイル記述子に拡張されます。
したがって、プロセスがファイル記述子をブロックし、そのうちの1つでI / Oが実行されるのを待っているようです。
私は戦略を少し変更してlsof -p <pid>
これらのファイルの実際の範囲を絞り込むことができるかどうかを見てみましょう。