Bien que pidof
et pgrep
soient d'excellents outils pour déterminer ce qui fonctionne, ils ne sont malheureusement pas disponibles sur certains systèmes d'exploitation. Une sécurité intégrée définitive serait d'utiliser ce qui suit:ps cax | grep command
La sortie sur Gentoo Linux:
14484? S 0:00 apache2
14667? S 0:00 apache2
19620? Sl 0:00 apache2
21132? Ss 0:04 apache2
La sortie sur OS X:
42582 ?? Z 0: 00.00 (smbclient)
46529 ?? Z 0: 00.00 (smbclient)
46539 ?? Z 0: 00.00 (smbclient)
46547 ?? Z 0: 00.00 (smbclient)
46586 ?? Z 0: 00.00 (smbclient)
46594 ?? Z 0: 00.00 (smbclient)
Sur Linux et OS X, grep renvoie un code de sortie, il est donc facile de vérifier si le processus a été trouvé ou non:
#!/bin/bash
ps cax | grep httpd > /dev/null
if [ $? -eq 0 ]; then
echo "Process is running."
else
echo "Process is not running."
fi
De plus, si vous souhaitez la liste des PID, vous pouvez facilement grep pour ceux-ci également:
ps cax | grep httpd | grep -o '^ [] * [0-9] *'
Dont la sortie est la même sous Linux et OS X:
3519 3521 3523 3524
La sortie de ce qui suit est une chaîne vide, ce qui rend cette approche sûre pour les processus qui ne sont pas en cours d'exécution:
écho ps cax | grep aasdfasdf | grep -o '^[ ]*[0-9]*'
Cette approche convient pour écrire un simple test de chaîne vide, puis même pour parcourir les PID découverts.
#!/bin/bash
PROCESS=$1
PIDS=`ps cax | grep $PROCESS | grep -o '^[ ]*[0-9]*'`
if [ -z "$PIDS" ]; then
echo "Process not running." 1>&2
exit 1
else
for PID in $PIDS; do
echo $PID
done
fi
Vous pouvez le tester en l'enregistrant dans un fichier (nommé "running") avec des droits d'exécution (chmod + x running) et en l'exécutant avec un paramètre: ./running "httpd"
#!/bin/bash
ps cax | grep httpd
if [ $? -eq 0 ]; then
echo "Process is running."
else
echo "Process is not running."
fi
AVERTISSEMENT!!!
Veuillez garder à l'esprit que vous analysez simplement la sortie, ps ax
ce qui signifie que, comme on le voit dans la sortie Linux, il ne s'agit pas simplement d'une correspondance sur les processus, mais aussi sur les arguments passés à ce programme. Je recommande fortement d'être aussi précis que possible lors de l'utilisation de cette méthode (par exemple ./running "mysql"
, correspondra également aux processus «mysqld»). Je recommande fortement d'utiliser which
pour vérifier par rapport à un chemin complet lorsque cela est possible.
Références:
http://linux.about.com/od/commands/l/blcmdl1_ps.htm
http://linux.about.com/od/commands/l/blcmdl1_grep.htm