Atribuindo a um processo um nome específico no GNU / Linux?

10

Como inicio um processo para que ele tenha um identificador específico no pscomando?

UPD : Eu tenho alguns servidores rodando 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 pythonem ps, o que torna impossível killallaquele em desenvolvimento deixando outros intactos.

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

Alex
fonte

Respostas:

7

Criar um link simbólico deve funcionar, no entanto, seria mais útil se conhecê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 nas informações extras que você poderia (tenho certeza de que há uma maneira mais fácil, mas não está chegando para mim no momento), seus servidores gravam seu PID em um arquivo na inicialização, e você pode matar -9 | cat /var/run/devserver.pid mas 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 ao iniciá-los. No topo da minha cabeça, você pode criar uma função de shell chamada startmyserver, por exemplo, que envolveria o comando usado para iniciar seus servidores, mas também capture $! para um arquivo baseado no nome da inicialização - então estamos falando sobre scripts de shell que são 'inbounds' @ ServerFault. :-)

GNUix
fonte
4

Você pode renomear o binário que irá executar. Você pode fugir 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 tenha tempo para lhe dar um exemplo de código agora, mas grite alto em cerca de 10 horas e verei o que posso fazer.

David Pashley
fonte
exatamente o meu ponto. Você precisa de código para isso (além de renomear / (sym) ligando o binário que poderia ser problemático se verifica a existência de argv [0])
Martin M.
Alguns binários não funcionarão bem se você for principalmente incorporado (busybox, dropbear)
encerrado em 19/02/15
3

Veja https://github.com/electrum/procname . Ele permite que você defina o nome do processo de qualquer processo usando uma variável anvironment.

Uso:

Execute Java com o conjunto de variáveis ​​de ambiente LD_PRELOAD e PROCNAME:

LD_PRELOAD = / caminho / para / libprocname.so PROCNAME = olá java -jar foo.jar

itsadok
fonte
2

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. Ou seja, isso não pode ser feito a partir da funcionalidade do seu shell ou procfs / sysfs. Você precisará usar um utilitário externo para alcançá-lo.

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

Atualizar:

Eles são python que muda o jogo. Sem ser tão SO agora, provavelmente seria mais fácil modificá-los para fazer uso deste módulo ou de uma abordagem semelhante.

Dan Carley
fonte
touche .. Eu sabia que havia uma maneira mais fácil :)
GNUix
O código C é consideravelmente mais detalhado do que o necessário devido à quantidade de saída que produz. Deve ser possível reduzi-lo, mas está fazendo o mesmo que eu estava sugerindo. Só com algum código para ir com ele :) O pouco que está faltando é o exec para executar seu código :)
David Pashley