如何將 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

相關內容