我试图追踪几个进程的一些奇怪行为,但遇到了一个我不确定如何追踪过去的点。我附加到使用的挂起进程strace -p
显示了以下内容:
Process 7926 attached - interrupt to quit
read(3,
好的,它正在等待 fd 3 上的输入,所以我去检查它是什么:
$ ls -l /proc/7926/fd/3
lr-x------ 1 user grp 64 Mar 15 10:41 /proc/7926/fd/3 -> pipe:[20043922]
好的,所以它是一个管道……现在的问题是——谁是这个管道的作者?我记得在 Linux 上有一个针对 unix 域套接字的特殊功能,您可以请求以 NUL 字节开头的文件路径来访问“抽象套接字命名空间”(此处提到:http://tkhanson.net/cgit.cgi/misc.git/plain/unixdomain/Unix_domain_sockets.html)。我不确定是否有类似的东西可以供我利用,但我还没有找到任何东西。
fuser
我希望像或这样的工具lsof
可能会有帮助,但我没有取得任何进展。
有任何想法吗?
答案1
符号链接内容“pipe:[20043922]”是一个唯一ID;管道的另一端将有一个匹配的ID。
(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null
应该向您展示管道的两端。
答案2
您可以使用命令获取使用管道的进程列表lsof
:
lsof | grep 'FIFO.*20043922'
输出将显示读者(在 FD 列中,具有像 1r 这样的条目)和写入者(在相同的列中,具有像 2w 这样的条目)。
答案3
我会用像素。
免责声明:这是我写的,所以我当然会推荐它。
px
会告诉您正在与哪些其他进程对话,sudo px 7926
并会让您得到答案。
示例输出(显然不是您的 PID,但仍然如此),滚动到底部进行管道跟踪:
~ $ sudo px 76572
cat
kernel(0) root
launchd(1) root
iTerm2(39341) johan
iTerm2(39343) johan
login(39344) root
-fish(39346) johan
----------> cat(76572) johan
14.62s ago cat was started, at 2020-09-12T16:20:12+02:00.
Other processes started close to cat(76572):
CoreServices/mdworker_shared(76468) was started 4m32s before cat(76572)
CoreServices/mdworker_shared(76475) was started 4m02s before cat(76572)
CoreServices/mdworker_shared(76541) was started 1m55s before cat(76572)
cat(76573) was started just after cat(76572)
sudo px(76583) was started 14.0s after cat(76572)
Users logged in when cat(76572) started:
johan
2020-09-12T16:20:26.739132: Now invoking lsof, this can take over a minute on a big system...
2020-09-12T16:20:27.052847: lsof done, proceeding.
Others sharing this process' working directory (/Users/johan)
cat(76573)
-fish(39346)
iTerm2(39343)
login(39344)
sudo px(76583)
File descriptors:
stdin : [CHR] /dev/ttys000
stdout: [PIPE] -> cat(76573) (0x204c1334a30aa50d)
stderr: [CHR] /dev/ttys000
Network connections:
Inter Process Communication:
cat(76573): [PIPE] ->0x204c1334a30aa50d
For a list of all open files, do "sudo lsof -p 76572", or "sudo watch lsof -p 76572" for a live view.
~ $