J'ai un .pid
fichier et je dois vérifier si le processus est en cours d'exécution. Jusqu'à présent, j'ai trouvé deux options
kill -0 `cat something.pid`
qui affiche une erreur si le pid ne fonctionne pas. Je sais que cela peut être redirigé vers /dev/null
, mais cela me fait penser que ce n'est pas la meilleure solution.
La seconde solution serait d’utiliser ps
, qui imprime cependant aussi sur le STDOUT
ps -ef `cat something.pid`
Est-il normal de rediriger la sortie vers /dev/null
et d'utiliser simplement le code d'état renvoyé, ou est-ce un signe que je fais quelque chose de mal et j'ai besoin d'une commande différente?
kill -0
car il est conforme à la norme (POSIX).Réponses:
pour la plupart des distributions Linux, l'énumération de / proc / {pid} est un bon moyen d'obtenir des informations sur les processus en cours d'exécution, et généralement sur la façon dont les commandes de l'espace utilisateur comme "ps" communiquent avec le noyau. Ainsi, par exemple, vous pouvez le faire;
Edit: vous devez vérifier que kpid est défini, mais cela est plus utile car il retournera "n'existe pas" pour unset $ {kpid}
la source
${kpid}
existeComme l'a noté Anders, vous devez utiliser
kill -0
pour la conformité POSIX.Sur les systèmes Linux, vous pouvez également vérifier l'existence d'un fichier dans le système de fichiers / proc, par exemple,
la source
Si cela se trouve dans un script (ce qui, je suppose, est le cas, car vous avez peur d'imprimer sur stdout), voici comment vous pouvez le faire:
Le
ps -p
recherche un processus avec le pid spécifié dans quelque$()
chose.pid (la syntaxe est une version légèrement plus récente du backtick. Backtick a besoin de s'échapper dans certaines circonstances que le nouveau formulaire ne fait pas). Les2>&1
redirections stderr pour cette commande également.Si la
ps -p
commande ne trouve pas le processus avec ce PID, elle se termine avec une erreur> 0 et ainsielse
s'exécute. Sinon, lakill
déclaration. Vous pouvez annuler ce qui précède si vous le souhaitez en faisant:J'espère que cela répond à votre question. Évidemment, soyez prudent et testez beaucoup lorsque vous utilisez des commandes dangereuses telles que
kill
.la source
Voici quelques options:
/etc/init.d/
) et si vous utilisez une distribution basée sur Debian, vous feriez mieux d'utiliserstart-stop-daemon
: Vous devriez obtenir le code de sortie 0 s'il est en cours d'exécution.procps
package:la source
Si vous avez un fichier pid, vous pouvez utiliser pgrep pour vérifier si le processus est en cours d'exécution:
la source