Maison  >  Article  >  Opération et maintenance  >  Linux détecte si un processus existe

Linux détecte si un processus existe

(*-*)浩
(*-*)浩original
2019-11-04 10:17:333139parcourir

Linux détecte si un processus existe

Détecter si le processus existe sous Linux                                                                                                                                                                          Simple, "ps -ef | grep xx"Un seul clic et c'est fait ! Bien sûr, vous pouvez le faire, mais si l’on considère les performances, ce n’est peut-être pas une bonne idée.

Supposons que nous voulions maintenant vérifier si un processus est actif. Vérifiez-le toutes les minutes. En utilisant la méthode ci-dessus, nous devons exécuter la commande ps et effectuer une recherche régulière grep toutes les minutes. Cette surcharge semble n'être rien sur le serveur, mais que se passe-t-il si nous voulons surveiller des dizaines ou des centaines de processus de ce type sur le même nœud en même temps ?

Nous devons donc explorer de meilleures méthodes du point de vue des performances. Pour les processus démons, ils ont généralement leurs propres fichiers pid ou lock. Nous pouvons vérifier si ces fichiers existent pour déterminer si le processus existe. Cependant, dans certaines circonstances anormales, le processus dans lequel se trouve le fichier pid n'existe pas. Par conséquent, vous ne pouvez pas vous fier au fichier pid du processus pour détecter si le processus est actif.

Une méthode fiable consiste à utiliser "kill -0 pid", kill -0 n'enverra aucun signal au processus, mais effectuera une vérification des erreurs. La commande renvoie 0 si le processus existe et 1 s'il n'existe pas.

[sw@gentoo ~]$ ps
  PID TTY          TIME CMD
pts/0    00:00:00 bash
pts/0    00:00:00 ps
[sw@gentoo ~]$ kill -0 15091
[sw@gentoo ~]$ echo $?
[sw@gentoo ~]$ kill -0 15092
-bash: kill: (15092) - No such process
[sw@gentoo ~]$ echo $?
[sw@gentoo ~]$

Cependant, cette méthode ne peut être utilisée que par les utilisateurs ordinaires pour vérifier leurs propres processus, car l'envoi de signaux aux processus d'autres utilisateurs provoquera une erreur en raison d'un manque d'autorisation, et la valeur de retour est aussi 1.

[sw@gentoo ~]$ kill 2993
-bash: kill: (2993) - Operation not permitted
[sw@gentoo ~]$ echo $?
1
[sw@gentoo ~]$
Bien sûr, si vous exécutez la commande kill en tant qu'utilisateur privilégié, il n'y aura aucun problème d'autorisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn