1 votes

récupérer l'identifiant du processus à partir du chemin

J'essaie de construire un joli service bash script pour un service personnalisé que j'ai construit, mon problème est que j'ai besoin d'identifier si le processus est en cours d'exécution armé avec le chemin du fichier seulement.

A force de chercher sur Internet, j'ai trouvé la réponse à la question de savoir comment trouver la trajectoire d'un PID, mais j'ai besoin de l'inverse.

Disons que mon exécutable est situé dans /home/monitor/script.py

Il est exécuté comme suit : Python /home/monitor/script.py

Avec cela, comment pourrais-je trouver l'ID du processus s'il est en cours d'exécution ?

1voto

Peter Westlake Points 786

Essayez d'utiliser ps pour rechercher le script par son nom :

ps -f -C python | grep /home/monitor/script.py

Le drapeau -C indique à ps de lister les processus nommés "Python", le -f donne une sortie "complète" incluant la ligne de commande, et le grep sélectionne le bon processus Python. Le pid est le deuxième champ de la ligne.

1 votes

Et pour n'avoir que le PID, j'ai ajouté ceci à la fin : | awk '{print $1}'

0 votes

En fait, ps -C peut également effectuer une recherche en utilisant le nom script (sur ce système Debian, du moins), ce qui vous permettrait d'éviter le grep.

0voto

nickgrim Points 4236

(En supposant que vous ayez Linux, vous pourriez être capable d'analyser quelque chose à partir de /proc - mais, ne le faites pas)

Si votre script a besoin de savoir s'il est déjà en cours d'exécution, faites-lui écrire un PID quelque part lorsqu'il s'exécute. Ensuite, votre script peut regarder à cet endroit quand il démarre pour voir s'il est déjà en cours d'exécution ou non.

Cela suppose bien sûr que vous ne voulez pas exécuter plus d'une instance à la fois ; si c'est le cas, ayez un chemin d'accès configurable au fichier PID que vous passez sur la ligne de commande, ou quelque chose de similaire.

0 votes

Une seule instance suffit, le problème vient au cours du développement lorsque l'on expérimente et que l'on obtient des plantages et autres. Le fichier pid sera laissé en place et le bash supposera qu'il fonctionne. J'ai besoin d'un moyen sûr de le savoir. J'expérimente avec ps mais je n'arrive pas à l'obtenir. Il doit être basé sur le chemin car il pourrait y avoir d'autres scripts exécutant des fichiers avec le nom. J'ai eu le malheur d'avoir un chemin Apache qui contenait le même nom exécuter un tuyau via cronolog et cela a été accroché par ps et a fait mon bash scripts rapport d'exécution alors qu'en fait il n'était pas.

0 votes

Vous ne vous contentez pas de vérifier que le fichier existe, vous lisez également son contenu et vous vérifiez si le PID qu'il contient est effectivement une instance de votre programme en cours d'exécution.

0voto

asyncopation Points 386

Une commande bash pour trouver les processus Python(2.7) :

$ lsof | awk '$9 ~ /^\/usr\/lib\/python2\.7/ {print $0}'

Vous pouvez modifier la commande ci-dessus à partir de la sortie que vous obtenez. J'obtiens des résultats variables ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X