在我的 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
。