Je viens d'essayer la commande suivante sur mon Ubuntu, cela ne montre rien:
pgrep php5
ne devrait-il pas renvoyer l'ID de processus de php5 (que la commande suivante ne fait que)?
ps aux | grep php5
Alors, quelle est la différence entre ces deux commandes?
ps aux
inclut la ligne de commande complète (chemin et paramètres), tandis que pgrep ne regarde que les (15) premiers caractères de les noms de l'exécutable.ps aux
renvoie la ligne de commande complète de chaque processus, alors que pgrep
ne regarde que les noms des exécutables.
Cela signifie que grepping ps aux
correspond à tout ce qui se produit dans le chemin ou dans les paramètres d'un processus 'binaire: par ex. `
ps aux | grep php5
correspondra à /usr/share/php5/i-am-a-Perl-script.pl
pgrep php5
ne le fera pasPrenons un exemple de mon système. Nous utiliserons seulement python au lieu de php5
:
ps aux | grep python
nous donne:izx 2348 0,0 0,7 514928 15644? Sl Jun24 0:00/usr/bin /python /usr/lib/unity-lens-video/unity-lens-video izx 2444 0.0 0.9 547392 18864? Sl Jun24 0:01/usr/bin /python /usr/lib/unity-scope-video-remote/unity-scope-video-remote root 2805 0.0 0.5 95436 12204? S juin24 0:00/usr/bin /python /usr/lib/system-service/system-service-d izx 6272 0.0 2.9 664400 60320? SNl Jun24 1:16/usr/bin /python / usr/bin/update-manager --no-focus-on-map root 11729 0.0 0.9 180508 19516? S juin 25 0:00 python /usr/lib/software-properties/software-properties-dbus
pgrep python
ne renvoie que 11729
, ce que vous verrez dans la liste ci-dessus est:racine 11729 0,0 0,9 180508 19516? S juin 25 0:00 python / usr/lib/software-properties/software-properties-dbus
La commande ps aux | grep x
donne de "meilleurs" résultats que pgrep x
essentiellement parce qu'il vous manque une option avec ce dernier.
Utilisez simplement l’option -f
pour pgrep
pour effectuer une recherche dans la ligne de commande complète et pas uniquement dans le nom du processus qui correspond à son comportement par défaut, par exemple:
pgrep -f php5
Contrairement à la construction ps | grep
avec laquelle vous devez filtrer la ligne grep
ou utiliser des tours de modèle, pgrep
ne se choisira pas tout seul.
De plus, si votre modèle apparaît dans la colonne ps
USER
name__, vous obtiendrez des processus indésirables dans la sortie, pgrep
ne souffrira pas de cette faille.
Si vous voulez des détails complets au lieu des pids, vous pouvez utiliser:
ps wup $(pgrep -f python)
qui est plus simple et plus fiable que
ps aux | grep python | grep -v grep
ou
ps aux | grep p[y]thon
diff <(ps aux|grep x) <(pgrep x) # :)