Wie können Sie den Prozessnamen von Wing IDE von Python in einen aussagekräftigeren Namen ändern?

Wie können Sie den Prozessnamen von Wing IDE von Python in einen aussagekräftigeren Namen ändern?

In meiner Prozessliste unter Ubuntu (mit top/ System Monitor) war einer der größten Speicherfresser (200+Mb) python. Ich suchte ein bisschen nach einem meiner Programme als Ursache, bis mir klar wurde, dass es meine Python IDE war (Flügel), das selbst in Python geschrieben ist.

Ich dachte, ich könnte den Namen des Programms ändern, indem ich setproctitle aus demProtokolltitel festlegenPaket, aber die von Wing verwendete Python-Version unterscheidet sich von meiner eigenen. setproctitlemuss kompiliert werden und das von Wing verwendete Python ist keine vollständige Installation (ich habe den Wing-Support gefragt, aber es ist unwahrscheinlich, dass sie das ändern/setproctitle integrieren).

setproctitlekann nur den Namen des laufenden Prozesses ändern, daher konnte ich auch kein Skript erstellen, das Wing startet und dann den Prozessnamen ändert.

Danach habe ich versucht, in /proc/PIDNUM/comm zu schreiben, aber obwohl diese „Datei“ „rw“ ist, darf ich dort nicht schreiben.

Ich habe endlich eine, nicht ganz so portable, Lösung für diesen speziellen Fall gefunden. Aber ich würde gerne wissen, ob es eine Standardmethode gibt, den Prozessnamen eines anderen (möglicherweise untergeordneten) Prozesses mit einem Linux-Systemaufruf zu ändern.

Antwort1

Ein Prozess kann nur in seine eigenen schreiben /proc/pid/comm. Da es also so klingt, als könnten Sie den Code der IDE ändern, können Sie ihn einfach in schreiben lassen /proc/self/comm.

Eine andere Möglichkeit wäre, den Namen der ausführbaren Python-Datei zu ändern und dann alle Zeilen zu ändern #!, aber das könnte ein ziemlicher Ärger sein.

Andere – schmerzhaftere – Optionen wären, etwas C-Code zu schreiben und LD_PRELOADoder zu verwenden ptrace.

Antwort2

Wie derobert bereits angedeutet hat, besteht der einfachste Weg, einen anderen Namen in der Prozesstabelle zu erhalten, wahrscheinlich darin, die „private“ ausführbare Python-Datei von pythonin umzubenennen wing_ide.

Der Startbefehl /usr/bin/wing4.1ist eigentlich ein minimales Shell-Skript, das ein zweites Skript aufruft, /usr/lib/wingide4.1/run-wing.shdas ich wie folgt gepatcht habe:

@@ -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"

zusätzlich habe ich das ${WINGHOME}/bin/PyCore/pythonnach kopiert ${WINGHOME}/bin/PyCore/wing_ide.

Für Wing 5.0 ist eine ähnliche Vorgehensweise möglich, aber der nach der Installation verwendete Standard-Python ist

  WINGPYTHON="${WINGHOME}/bin/runtime-python2.7/bin/python2.7"

also muss dies wing_idein das gleiche Verzeichnis kopiert und verwendet werden

Antwort3

Sie können den gesamten Befehl zum Aufrufen eines Prozesses sehen top, aber standardmäßig wird er nicht angezeigt. Schalten Sie dies mit Kleinbuchstaben um c. So sollten Sie eine Python-App von einer anderen unterscheiden können.

Der Unterschied zwischen dem Befehlszeilenaufruf und dem Prozessnamen wird auch in proc als cmdlineund angezeigt comm.

verwandte Informationen