正在读取 /proc/PID/maps 个短暂的进程

Reading /proc/PID/maps of short-lived process

我有一个二进制文件 exits/segfaults 在执行后不久。我试图在它退出之前读取这个二进制文件的 /proc/PID/maps 但没有成功。

我试过 cat /proc/($./binary [input] & echo $!)/maps 应该会导致 /proc/pidofprocess/maps 但总是得到 No such file or directory.

我的目标是查看在后续运行中将内容加载到何处。

你的解决方案 cat /proc/$(<pipeline>)/maps 在整个 <pipeline> 结束之前不会调用 cat(即使你在其中使用 &),所以你永远不会得到你的 maps

另一方面,

<pipeline> & cat /proc/${!}/maps

将立即return。当然,当您的二进制文件立即退出时,cat 可能仍然 运行 来不及捕获 /proc/${!}/maps

不过你可以试试:

while true; do; ./binary [input] & cat /proc/${!}/maps ; done

这会重新开始你的 binarycat 之间的比赛一整天,并且 有时 cat 可能会赢(确实如此,在我的情况是 ls <nonexisting file> 而不是 ./binary 30 次中有 1 次)

这会在您的终端上打印出大量垃圾,但您可以通过重定向 cat 的输出来收集成功的地图:

while true; do; ./binary [input] & cat /proc/${!}/maps >> mymaps; done

优雅?号有效:希望如此!