Como você pode alterar o nome do processo do Wing IDE de python para algo mais descritivo

Como você pode alterar o nome do processo do Wing IDE de python para algo mais descritivo

Na minha lista de processos no Ubuntu (usando top/ System Monitor), um dos maiores consumidores de memória (200 + Mb) foi python. Procurei um pouco por um dos meus programas para ser a causa até perceber que esse era o meu IDE Python (Asa), que por sua vez é escrito em Python.

Achei que poderia mudar o nome do programa inserindo setproctitle dodefinirproctitlepacote, mas a versão python que Wing está usando é diferente da minha. setproctitleprecisa ser compilado e o python que o wing usa não é uma instalação completa (pedi ao suporte do Wing, mas é improvável que eles mudem isso/incorporem setproctitle).

setproctitlesó posso alterar o nome do processo em execução, então também não consegui fazer um script que iniciasse o Wing e depois alterar o nome do processo.

Depois disso, tentei escrever em /proc/PIDNUM/comm, mas embora esse 'arquivo' seja 'rw', não tenho permissão para escrever lá.

Finalmente encontrei uma solução não tão portátil para este caso específico. Mas eu gostaria de saber se existe uma maneira padrão de alterar o nome do processo de outro processo (possivelmente filho) com uma chamada de sistema Linux.

Responder1

Um processo só pode escrever em seu próprio arquivo /proc/pid/comm. Então, como parece que você pode modificar o código do IDE, basta fazer com que ele grave no arquivo /proc/self/comm.

Outra opção seria alterar o nome do executável Python e depois alterar todas as #!linhas, mas isso pode ser um PITA.

Outras opções – mais dolorosas – seriam escrever algum código C e usar LD_PRELOADor ptrace.

Responder2

Como derobert já indicou, provavelmente a maneira mais fácil de obter um nome diferente na tabela de processos é renomear o executável python 'privado' de pythonpara wing_ide.

O comando de inicialização, /usr/bin/wing4.1é na verdade um script de shell mínimo que chama um segundo script /usr/lib/wingide4.1/run-wing.shque corrigi da seguinte maneira:

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

além disso copiei o ${WINGHOME}/bin/PyCore/pythonto ${WINGHOME}/bin/PyCore/wing_ide.

Para o Wing 5.0, algo semelhante pode ser feito, mas o python padrão obtido após a instalação é

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

então isso deve ser copiado wing_ideno mesmo diretório e usado

Responder3

Você pode ver todo o comando usado para invocar um processo usando top, mas ele não o mostra por padrão. Alterne isso com letras minúsculas c. Isso deve permitir que você distinga um aplicativo python de outro.

A diferença entre a invocação da linha de comando e o nome do processo também aparece em proc, como cmdlinee comm.

informação relacionada