Как изменить имя процесса Wing IDE с python на что-то более описательное?

Как изменить имя процесса Wing IDE с python на что-то более описательное?

В моем списке процессов в Ubuntu (используя top/ System Monitor) одним из самых больших пожирателей памяти (200+ Мб) был python. Я немного поискал одну из моих программ, чтобы найти причину, пока не понял, что это была моя Python IDE (Крыло), который сам по себе написан на Python.

Я думал, что могу изменить имя программы, вставив setproctitle изsetproctitleпакет, но версия Python, которую использует Wing, отличается от моей. его setproctitleнеобходимо скомпилировать, а Python, который использует Wing, не является полной установкой (я спрашивал в службе поддержки Wing, но они вряд ли изменят это/внедрят setproctitle).

setproctitleможно изменить только имя запущенного процесса, поэтому я не смог создать скрипт, который запускает Wing, а затем изменить имя процесса.

После этого я попытался записать в /proc/PIDNUM/comm, но хотя этот «файл» имеет разрешение «rw», мне не разрешено туда писать.

Я наконец нашел не очень переносимое решение для этого конкретного случая. Но я хотел бы узнать, есть ли стандартный способ изменить имя процесса другого (возможно, дочернего) процесса с помощью системного вызова Linux.

решение1

Процесс может писать только в свой собственный /proc/pid/comm. Так что, поскольку похоже, что вы можете изменять код IDE, вы можете просто заставить его писать в /proc/self/comm.

Другой вариант — изменить имя исполняемого файла Python, а затем изменить все строки #!, но это может оказаться слишком сложным.

Другие — более болезненные — варианты заключаются в написании кода на языке C и использовании LD_PRELOADили ptrace.

решение2

Как уже указал derobert, вероятно, самый простой способ получить другое имя в таблице процессов — это переименовать «приватный» исполняемый файл Python pythonиз wing_ide.

Команда запуска, /usr/bin/wing4.1на самом деле, представляет собой минимальный скрипт оболочки, вызывающий второй скрипт, /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.

Связанный контент