En mi lista de procesos en Ubuntu (usando top
/ System Monitor
), uno de los mayores consumidores de memoria (más de 200 Mb) era python
. Busqué un poco que uno de mis programas fuera la causa hasta que me di cuenta de que este era mi IDE de Python (Ala), que a su vez está escrito en Python.
Pensé que podría cambiar el nombre del programa insertando setproctitle desde elestablecerproctítulopaquete, pero la versión de Python que utiliza Wing es diferente a la mía. setproctitle
debe compilarse y el Python que usa Wing no es una instalación completa (le pregunté a Wing Support pero es poco probable que cambien eso/incorporen setproctitle).
setproctitle
Solo puedo cambiar el nombre del proceso en ejecución, por lo que tampoco pude crear un script que inicie Wing y luego cambie el nombre del proceso.
Después de eso intenté escribir en /proc/PIDNUM/comm, pero aunque ese 'archivo' es 'rw', no puedo escribir allí.
Finalmente encontré una solución no tan portátil para este caso particular. Pero me gustaría saber si existe una forma estándar de cambiar el nombre del proceso de otro proceso (posiblemente hijo) con una llamada al sistema Linux.
Respuesta1
Un proceso sólo puede escribir en sí mismo /proc/pid/comm
. Entonces, dado que parece que puedes modificar el código del IDE, puedes simplemente escribirlo en /proc/self/comm
.
Otra opción sería cambiar el nombre de su ejecutable de Python y luego cambiar todas las #!
líneas, pero puede ser un PITA.
Otras opciones (más dolorosas) serían escribir código C y usar LD_PRELOAD
o ptrace
.
Respuesta2
Como ya indicó derobert, probablemente la forma más fácil de obtener un nombre diferente en la tabla de procesos es cambiar el nombre del ejecutable de Python 'privado' de python
a wing_ide
.
El comando de inicio, /usr/bin/wing4.1
es en realidad un script de shell mínimo que llama a un segundo script /usr/lib/wingide4.1/run-wing.sh
que parcheé de la siguiente manera:
@@ -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"
además de eso copié el ${WINGHOME}/bin/PyCore/python
to ${WINGHOME}/bin/PyCore/wing_ide
.
Para Wing 5.0 se puede hacer algo similar, pero el Python predeterminado que se toma después de la instalación es
WINGPYTHON="${WINGHOME}/bin/runtime-python2.7/bin/python2.7"
entonces esto debe copiarse wing_ide
en el mismo directorio y usarse
Respuesta3
Puede ver el comando completo utilizado para invocar un proceso usando top
, pero no lo muestra de forma predeterminada. Cambie eso con minúsculas c
. Esto debería permitirle distinguir una aplicación de Python de otra.
La diferencia entre la invocación de la línea de comando y el nombre del proceso también aparece en proc, como cmdline
y comm
.