我有一个二进制文件在执行后不久就退出/出现段错误。我试图在它退出之前读取这个二进制文件的/proc/PID/maps 但没有成功。
我已经尝试过 cat/proc/($./binary [input] & echo $!)/maps
应该导致/proc/pidofprocess/maps 但总是得到 No such file 或目录。
我的目标是查看在后续运行中将内容加载到何处。
最佳答案
你的解决方案cat /proc/$(<pipeline>)/maps
不会调用cat
直到整个<pipeline>
已经结束(即使你在其中使用 &
),所以你永远不会得到你的 maps
.
另一方面,
<pipeline> & cat /proc/${!}/maps
马上回来。当然,当您的二进制文件立即退出时,cat
可能仍然来不及捕获 /proc/${!}/maps
但是你可以试试:
while true; do; ./binary [input] & cat /proc/${!}/maps ; done
这将重新开始您的 binary
之间的竞赛和 cat
一整天,有时 cat
可能会赢(在我的例子中,它确实是用 ls <nonexisting file>
而不是 ./binary
30 次中有 1 次)
这会在您的终端上打印出大量垃圾,但您可以通过重定向 cat
来收集成功的 map 。输出:
while true; do; ./binary [input] & cat /proc/${!}/maps >> mymaps; done
优雅?没有。有效:我希望如此!
关于linux - 读取/proc/PID/短暂进程的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57069454/