Utilisation de pgrep / pidof pour les noms de processus complexes?

11

J'essaie d'utiliser pidof ou pgrep pour pouvoir envoyer un HUP à un processus dans mon système. Le problème est que je veux seulement tuer le processus avec un paramètre précis.

Ceci est la sortie de 'ps awx'

  657 ?        S      0:00 processname software
  658 ?        S      0:00 processname demo
  659 ?        S      0:00 processname test

En faisant l'une de ces actions:

pidof processname 
pgrep processname

Vous obtenez la liste de tous les processus commençant par nom de processus, mais je voudrais faire quelque chose comme:

pidof processname test
pgrep processname test

Pour récupérer uniquement le PID dont j'ai besoin (dans cet exemple, ce serait 659)

MISE À JOUR

En utilisant le drapeau -f sur pgrep fait juste ce que je voulais, en faisant:

pgrep -f "processname test"

Vous obtiendrez la bonne réponse.

aseques
la source
Bon, vous avez généralement besoin -fparce que vous voulez faire correspondre sur la ligne de commande complète. Notez que pgrep fonctionne sur les expressions régulières, vous pouvez donc également effectuer des correspondances relativement complexes.
cjc

Réponses:

10
$ ps aux |grep [d]evio
user01   10220  0.0  0.1   5376  2424 pts/5    S+   11:41   0:00 ssh devio
$ pgrep -f "ssh devio"
10220
$ pkill -0 -f "ssh devio" ; echo $?
0
jirib
la source