As you hinted, the challenge you're seeing is that the open() call hasn't completed; it's blocking waiting for a writer to open. Since the pipe isn't open, yet, it won't show in fuser or lsof or in /proc/<pid>/fd; no file handle has been associated with it!
We can see what processes are waiting for a pipe to open; e.g.
% grep pipe_wait /proc/*/stack /proc/12104/stack:[<ffffffffa1665520>] pipe_wait+0x70/0xc0
So we can see PID 12104 is waiting for a pipe, but this doesn't tell us what pipe. But we can potentially use this information and the timeout strace you've already used to see...
e.g.
#!/bin/bash want=/tmp/testpipe cd /proc || exit grep pipe_wait */stack | cut -d/ -f1 | while read -r p do x=$(timeout 0.2 strace -p $p 2>&1) if [ -n "$(echo "$x" | grep $want)" ] then echo "Process $p is trying to open $want" ps -p "$p" fi done
This results in output similar to
Process 12104 is trying to open /tmp/testpipe PID TTY TIME CMD 12104 pts/1 00:00:00 wc
inotifywaitto watch opens of the pipe. This question and answer don't give a script/command for your use case, but they show the general use and options that you should be able to customize: unix.stackexchange.com/questions/724480/…inotifywaitneeds me to begin searching for processes before these processes appear , but I'm looking for processes that are already running (blocking) at the time I'm searching for them.