在我的 Ubuntu 下的进程列表中(使用top
/ System Monitor
),最大的内存占用之一(200+Mb)是python
.我搜索了一下我的程序是否是这个原因,直到我意识到这是我的 Python IDE(翅膀),它本身是用 Python 编写的。
我想我可以通过插入 setproctitle 来更改程序的名称设置进程标题包,但是Wing使用的python版本和我自己的不同。setproctitle
需要编译,并且 wing 使用的 python 不是完整安装(我询问了 Wing 支持,但他们不太可能更改/合并 setproctitle)。
setproctitle
只能更改正在运行的进程的名称,因此我无法制作启动 Wing 然后更改进程名称的脚本。
之后我尝试写入 /proc/PIDNUM/comm,但尽管该“文件”是“rw”,但我不允许在那里写入。
我终于为这个特殊情况找到了一个不太便携的解决方案。但我想知道是否有一种标准方法可以通过 Linux 系统调用更改另一个(可能是子)进程的进程名称。
答案1
进程只能写入自己的/proc/pid/comm
.因此,既然听起来您可以修改 IDE 的代码,您只需将其写入/proc/self/comm
.
另一种选择是更改其 Python 可执行文件的名称,然后更改所有#!
行,但这可能是 PITA。
其他更痛苦的选择是编写一些 C 代码并使用LD_PRELOAD
or ptrace
。
答案2
正如 derobert 已经指出的那样,在进程表中获取不同名称的最简单方法可能是将“私有”python 可执行文件从 重命名python
为wing_ide
。
启动命令/usr/bin/wing4.1
实际上是一个最小的 shell 脚本,调用/usr/lib/wingide4.1/run-wing.sh
我修补的第二个脚本,如下所示:
@@ -66,7 +66,9 @@
# Location of Python interpreter to use, if not already set
if [ "${WINGPYTHON}" = "" ]; then
- if [ -x "${WINGHOME}/bin/PyCore/python" ]; then
+ if [ -x "${WINGHOME}/bin/PyCore/wing_ide" ]; then
+ WINGPYTHON="${WINGHOME}/bin/PyCore/wing_ide"
+ elif [ -x "${WINGHOME}/bin/PyCore/python" ]; then
WINGPYTHON="${WINGHOME}/bin/PyCore/python"
elif [ "${WINGIDE_USE_QT4}" = "1" ]; then
WINGPYTHON="${WINGHOME}/bin/runtime-python2.7/bin/python2.7"
除此之外,我将其复制${WINGHOME}/bin/PyCore/python
到${WINGHOME}/bin/PyCore/wing_ide
.
对于 Wing 5.0 可以做类似的事情,但安装后采用的默认 python 是
WINGPYTHON="${WINGHOME}/bin/runtime-python2.7/bin/python2.7"
所以必须将其复制到wing_ide
同一目录中并使用
答案3
您可以使用 来查看用于调用进程的整个命令top
,但默认情况下不会显示。用小写切换c
。这应该使您能够区分一个 python 应用程序和另一个。
命令行调用和进程名称之间的区别也显示在 proc 中,如cmdline
和comm
。