7

我正在尝试使用 python 和 python ptrace 来读取外部进程的内存。我需要完全在 python 中工作,我一直在尝试读取和打印 linux 中进程的内存。

因此,例如,我尝试了以下代码,它不断给我 IO 错误:

proc_mem = open("/proc/%i/mem" % process.pid, "r")
print proc_mem.read()
proc_mem.close()

大多数情况下,我只想反复转储进程的内存并寻找随时间的变化。如果这是正确的方法,那么我的问题是什么?或者有没有更合适的方法来做到这一点?

4

2 回答 2

3

从 python 调用 shell 命令 - 子进程模块

import subprocess

# ps -ux | grep 1842 (Assuming 1842 is the process id. replace with process id you get)

p1 = subprocess.Popen(["ps", "-ux"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", "1842"], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
print output

并通过输出解析以查看其内存利用率

于 2012-12-10T19:40:19.210 回答
1

大多数情况下,我只想反复转储进程的内存并寻找随时间的变化。如果这是正确的方法,那么我的问题是什么?或者有没有更合适的方法来做到这一点?

您可能对 gdb 的反向调试感兴趣,它记录了进程内存的所有更改。这是教程谷歌缓存)。

如果您想使用原始录音工具,还有Robert O'CallahanChronicle / Chronomancer 作品。

于 2013-03-19T11:56:02.823 回答