다음 "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는 에지 트리거 또는 레벨 트리거 인터페이스로 사용할 수 있으며 모니터링되는 많은 수의 파일 설명자로 확장됩니다.
따라서 프로세스가 파일 설명자를 차단하고 그 중 하나에서 I/O가 수행될 수 있는지 기다리는 것 같습니다.
나는 전략을 약간 변경하여 lsof -p <pid>
이러한 파일의 실제 범위를 좁힐 수 있는지 알아보겠습니다.