在Linux的proc(5)
手册页告诉我,/proc/$pid/mem
“可用于访问进程的内存的页面”。但是直接尝试使用它只会给我
$ cat /proc/$$/mem /proc/self/mem
cat: /proc/3065/mem: No such process
cat: /proc/self/mem: Input/output error
Run Code Online (Sandbox Code Playgroud)
为什么不能cat
打印自己的内存(/proc/self/mem
)?当我尝试打印 shell 的内存时,这个奇怪的“没有这样的进程”错误是什么(/proc/$$/mem
显然进程存在)?那我怎么读/proc/$pid/mem
呢?
在我的 Ubuntu(使用top
/ System Monitor
)下的进程列表中,最大的内存猪(200+Mb)之一是python
. 我搜索了一些我的程序,直到我意识到这是我的 Python IDE ( Wing ),它本身是用 Python 编写的。
我以为我可以通过从setproctitle包中插入 setproctitle 来更改程序的名称,但是 Wing 使用的 python 版本与我自己的不同。setproctitle
需要编译,并且 wing 使用的 python 不是完整安装(我询问了 Wing 支持,但他们不太可能更改/合并 setproctitle)。
setproctitle
只能更改正在运行的进程的名称,因此我也无法制作启动 Wing 然后更改进程名称的脚本。
之后,我尝试写入 /proc/PIDNUM/comm,但尽管该“文件”是“rw”,但我不允许在那里写入。
我终于为这个特殊情况找到了一个不太便携的解决方案。但是我想知道是否有一种标准方法可以使用 Linux 系统调用更改另一个(可能是子)进程的进程名称。