17

Attaching strace shows a lot of these messages:

poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout)

poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout)

poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout)

poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout)

How can I find what file the program is trying to access that causes poll system call to timeout?

strace generates a lot of messages which make it hard to debug

dr0i
  • 2,380
  • 2
  • 19
  • 36
mahmood
  • 23,197
  • 49
  • 147
  • 242
  • 1
    Depends. What are these six fds? Did you find matching calls to `open()` in the trace log? – Frédéric Hamidi Oct 22 '12 at 20:08
  • I don't know. WHat does that mean? – mahmood Oct 22 '12 at 20:09
  • Can you explain the steps in a reply? What do you mean by matching? – mahmood Oct 22 '12 at 20:12
  • 1
    Assuming these file descriptors are actually files (as opposed to sockets or pipes), there should be calls to the `open()` syscall in the output of `strace`. You would have to look for the ones that returned `5`, `6`, etc. in order to determine which files were opened. – Frédéric Hamidi Oct 22 '12 at 20:15

2 Answers2

29

How can I find what file the program is trying to access that causes poll system call to timeout?

Invoke:

lsof -p <pid>

And see what the file descriptors in question refer to.

You can also take a look into proc filesystem on Linux:

ls -l /proc/<pid>/fd
Maxim Egorushkin
  • 131,725
  • 17
  • 180
  • 271
0

ls -l /proc//fd/ -> You will get the corresponding node Id. ss -p | grep -> you will get the socket file path the fd belongs to.