「 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記述子がどのファイル記述子にマップするのかについていくらかの洞察を与えることができるコマンドはありますか?.
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は、エッジトリガーまたはレベルトリガーのいずれかのインターフェースとして使用でき、多数の監視対象ファイル記述子に適切にスケーリングします。
したがって、ファイル記述子でI/Oが可能かどうかを確認するためにファイル記述子をブロックしているように見えます。
私は戦術を少し変えて、lsof -p <pid>
これらのファイルが実際に何であるかを絞り込むことができるかどうかを確認します。