Dando um processo um nome específico no GNU / Linux?

9

Como eu inicio um processo para que ele tenha um identificador específico no comando ps ?

UPD : tenho alguns servidores em execução em uma caixa. A maioria deles está no modo de implantação. No entanto, um está em desenvolvimento. Todos os servidores são Pythonic e a doença é que todos os servidores estão listados como python in ps , o que torna impossível killall o em desenvolvimento deixando os outros intactos.

UPD : Como David e GNUix sugeriram, criei links simbólicos para o interpretador Python e scripts bash para cada servidor.

    
por Alex 10.06.2009 / 13:00

4 respostas

7

A criação de um link simbólico deve funcionar, no entanto, seria mais útil se soubéssemos a doença e não o sintoma. O que exatamente você está tentando fazer? Porque pode haver uma maneira melhor

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

Atualização: Com base na informação extra que você poderia (eu tenho certeza que há uma maneira mais fácil, mas não está chegando a mim no momento) ter seus servidores gravar seu PID para um arquivo após a inicialização, então você poderia matar -9 | cat /var/run/devserver.pid mas então isso seria uma questão de programação:)

Atualize novamente: Você também pode fazer alguns truques de shell para obter o PID dos servidores quando você iniciá-los, em cima da minha cabeça você poderia criar uma função de shell chamada startmyserver por exemplo, que iria envolver o comando que você usa para iniciar seus servidores, mas também capturar ! para um arquivo baseado no nome de inicialização - então estamos falando de shell script que é 'inbounds' @ ServerFault. : -)

    
por 10.06.2009 / 13:13
4

Você pode renomear o binário que será executado. Você pode sair usando apenas um link simbólico para o binário.

Se você realmente deseja alterar o nome, a melhor maneira é usar um wrapper simples que defina argv e, em seguida, execute o processo que você deseja executar. Não tenho tempo para dar um código de exemplo agora, mas grite bem alto em cerca de 10 horas e eu vou ver o que posso fazer.

    
por 10.06.2009 / 13:08
3

Isso realmente não pertence ao SO porque é genérico, não é uma pergunta específica do idioma.

A resposta curta não é fácil. Isto é, não pode ser feito dentro da funcionalidade do seu shell ou procfs / sysfs. Você precisará usar um utilitário externo para alcançá-lo.

Há uma longa descrição sobre como e por que aqui . Cuidado, é bem centrado em C.

Atualização:

Eles são python que mudam o jogo. Sem agora ser muito SO, provavelmente seria mais fácil modificá-los para usar o este módulo ou uma abordagem semelhante.

    
por 10.06.2009 / 13:11
3

Veja o link . Ele permite que você defina o nome do processo de qualquer processo usando uma variável anvironment.

Usage:

Run Java with the LD_PRELOAD and PROCNAME environment variables set:

LD_PRELOAD=/path/to/libprocname.so PROCNAME=hello java -jar foo.jar

    
por 27.11.2012 / 10:14