如何将 Wing IDE 的进程名称从 python 更改为更具描述性的名称

如何将 Wing IDE 的进程名称从 python 更改为更具描述性的名称

在我的 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_PRELOADor ptrace

答案2

正如 derobert 已经指出的那样,在进程表中获取不同名称的最简单方法可能是将“私有”python 可执行文件从 重命名pythonwing_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 中,如cmdlinecomm

相关内容