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. setproctitle
precisa 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).
setproctitle
só 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_PRELOAD
or 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 python
para 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.sh
que 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/python
to ${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_ide
no 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 cmdline
e comm
.