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

5

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

Pensei que poderia alterar o nome do programa inserindo setproctitle do pacote setproctitle , mas o A versão do Python que o Wing está usando é diferente da minha. setproctitle precisa ser compilado e o python que a asa usa não é uma instalação completa (perguntei ao Wing Support, mas é improvável que eles alterem / incorporem setproctitle).

setproctitle só pode alterar o nome do processo em execução, por isso não consegui criar um script que inicie o Wing e depois altere o nome do processo.

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

Eu finalmente encontrei uma solução não tão portátil para esse caso em particular. Mas eu gostaria de saber se existe uma maneira padrão de mudar o nome do processo de outro (possível um processo filho) com uma chamada do sistema Linux.

    
por Anthon 26.04.2013 / 16:00

3 respostas

3

Um processo só pode gravar em seu próprio /proc/pid/comm . Então, como parece que você pode modificar o código do IDE, basta gravar em /proc/self/comm .

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

Outras opções - mais dolorosas - seriam escrever código C e usar LD_PRELOAD ou ptrace .

    
por 26.04.2013 / 17:38
3

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

O comando de inicialização, /usr/bin/wing4.1 , é na verdade um script de shell mínimo chamando um segundo script /usr/lib/wingide4.1/run-wing.sh que eu corrigi como segue:

@@ -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/python para ${WINGHOME}/bin/PyCore/wing_ide .

Para o Wing 5.0, uma coisa semelhante pode ser feita, mas o python padrão após a instalação é

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

então isso deve ser copiado para wing_ide no mesmo diretório e usado

    
por 26.04.2013 / 19:39
2

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

A diferença entre a chamada da linha de comando e o nome do processo aparece no proc também, como cmdline e comm .

    
por 26.04.2013 / 16:04