Donner à un processus un nom spécifique sous GNU / Linux?

10

Comment lancer un processus pour qu'il ait un identifiant spécifique dans la pscommande?

UPD : J'ai quelques serveurs fonctionnant sur une boîte. La plupart d'entre eux sont en mode déploiement. Cependant, on est en développement. Tous les serveurs sont Pythonic et la maladie est que tous les serveurs sont répertoriés comme pythondans ps, ce qui rend impossible pour killallcelui en développement de laisser les autres intacts.

UPD : Comme David et GNUix l'ont suggéré, j'ai créé des liens symboliques vers l'interpréteur Python et des scripts bash pour chaque serveur.

Alex
la source

Réponses:

7

La création d'un lien symbolique devrait faire l'affaire, cependant, il serait plus utile de connaître la maladie et non le symptôme. Qu'est-ce que vous essayez de faire exactement? Parce qu'il peut y avoir une meilleure façon

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)--
(~)

Mise à jour: sur la base des informations supplémentaires que vous pourriez (je suis sûr qu'il existe un moyen plus simple mais ce n'est pas pour moi pour le moment) que vos serveurs écrivent leur PID dans un fichier au démarrage, vous pouvez alors tuer -9 | cat /var/run/devserver.pid mais alors ce serait une question de programmation :)

Mettre à jour à nouveau: vous pouvez également faire une supercherie shell pour obtenir le PID des serveurs lorsque vous les lancez, du haut de ma tête, vous pouvez créer une fonction shell appelée startmyserver par exemple qui encapsulerait la commande que vous utilisez pour démarrer vos serveurs mais capturez également $! à un fichier basé sur le nom de démarrage - alors nous parlons de script shell qui est «inbounds» @ ServerFault. :-)

GNUix
la source
4

Vous pouvez renommer le binaire que vous allez exécuter. Vous pourriez vous en sortir en utilisant simplement un lien symbolique vers le binaire.

Si vous voulez vraiment changer le nom, la meilleure façon est d'utiliser un simple wrapper qui définit argv puis exécute le processus que vous souhaitez exécuter. Je n'ai pas le temps de vous donner un exemple de code maintenant, mais criez fort dans environ 10 heures et je verrai ce que je peux faire.

David Pashley
la source
exactement mon point. Vous avez besoin de code pour cela (à part renommer / (sym) reliant le binaire qui pourrait être problématique s'il vérifie argv [0])
Martin M.
Certains binaires ne fonctionneront pas bien si vous les utilisez principalement embarqués (busybox, dropbear)
nhed
3

Regardez https://github.com/electrum/procname . Il vous permet de définir le nom du processus de tout processus à l'aide d'une variable d'environnement.

Usage:

Exécutez Java avec les variables d'environnement LD_PRELOAD et PROCNAME définies:

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

itsadok
la source
2

Cela n'appartient pas vraiment à SO car c'est générique, pas une question spécifique à la langue.

La réponse courte n'est pas facile. Autrement dit, cela ne peut pas être fait à partir des fonctionnalités de votre shell ou de procfs / sysfs. Vous devrez utiliser un utilitaire externe pour y parvenir.

Il y a une longue description sur comment et pourquoi ici . Attention, c'est plutôt centré sur C.

Mise à jour:

Ce sont des pythons qui changent le jeu. Sans être maintenant trop SO, il serait probablement plus facile de les modifier pour utiliser ce module ou une approche similaire.

Dan Carley
la source
touche .. Je savais qu'il y avait un moyen plus simple :)
GNUix
Le code C est beaucoup plus verbeux qu'il ne devrait l'être en raison de la quantité de sortie qu'il fait. Il devrait être possible de le réduire, mais il fait à peu près la même chose que je suggérais. Seulement avec du code pour l'accompagner :) Le peu qu'il manque est l'exécutable pour exécuter votre code :)
David Pashley