69

In Linux if you go digging in /proc/<pid>/fd often you'll see output like:

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

How do I get more info about the open pipes, such as which process is on the other end?

1
  • lsof, of finding in whole /proc is slow. Can someone provide a more effective solution?
    – pihentagy
    May 14, 2014 at 14:09

4 Answers 4

59

Similiar to other answers, but:

lsof | grep 90222668

Will show you both ends, because both ends share the 'pipe number'.

6
  • 4
    Ah, of course. Works as expected. You can even tell the file descriptor number and which end is the reader and which is the writer by looking at the 4th column of output! Jul 31, 2009 at 18:07
  • I think that number might be the inode number of the pipe for pipefs which you can't mount. I am looking for a way to get inode to filename mappings, but this might be the best way. By the way, I love this question :-) Jul 31, 2009 at 18:24
  • Somehow this is not working for me. All it outputs is the pipe itself. Mar 17, 2014 at 10:23
  • running lsof as standard user may not give you information from all processes. Usually you don't have permission to see all processes' /proc/<pid>/fd directory as a non-root user. Jun 3, 2016 at 10:35
  • 6
    Also, you might want to use lsof -n -P | grep 90222668 to avoid unnecessary name lookups, which should speed it up.
    – Wodin
    Oct 14, 2016 at 11:48
5

The only way to find what process is on the other end is by looping over all processes in /proc and seeing which are using that pipe (ie, which have symlinks in /proc/pid/fd to the same pipe ID)

1
  • 1
    Thanks for the tip. One way to automate this is: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID The first ls command will print the file descriptors of both ends of the pipe, while the second will give you the process id
    – Joao Costa
    Jan 25, 2016 at 9:17
2

The most information I know how to get on open pipes is

lsof|grep FIFO

Still only tells about one end of it, I'm afraid.

1
  • That's about the same as I can divine from /proc, I assume lsof gets it from the same location. Jul 30, 2009 at 22:41
2
lsof +E | grep FIFO | grep 90222668

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .