Je recherche une seule ligne qui renvoie le pid d'un processus en cours d'exécution.
Actuellement j'ai:
ps -A -o pid,cmd|grep xxx|head -n 1
Et cela retourne le poing pid, command
. Je n'ai besoin que du premier nombre de la sortie et d'ignorer le reste. Je suppose que sed
ou awk
serait utile ici, mais mon expérience avec eux est limitée.
En outre, ceci a un autre problème, il retournera le pid de grep si le xxx n'est pas en cours d'exécution.
C'est vraiment important d'avoir une seule ligne, car je veux réutiliser la sortie pour faire autre chose, comme tuer ce processus.
Si vous voulez juste le pid du processus, vous pouvez utiliser pgrep
si disponible. pgrep <command>
renverra le pid de la commande (ou la liste des pids au cas où il y aurait plus d'une instance de la commande en cours d'exécution, auquel cas vous pouvez utiliser head
ou d'autres commandes appropriées)
J'espère que cela t'aides!
Juste une commande supplémentaire nécessaire; vous ne voulez que le premier champ d'une ligne de valeurs séparées par des espaces:
ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'
Deux. J'ai ajouté un autre grep pour supprimer ce dernier de la sortie.
Il suffit d'utiliser pgrep, c'est beaucoup plus simple
pgrep -o -x xxxx
Ce qui précède sélectionne le processus le plus ancien portant le nom exact
pidof xxx
suffira sur linux
Courir sur Cygwin, je ne peux donc pas utiliser -A et -o, mais quelque chose comme ceci:
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
4580 1 4580 4580 ? 55573 May 21 /usr/bin/mintty
5808 7072 5808 7644 pty3 55573 13:35:31 /usr/bin/ps
7072 5832 7072 6424 pty3 55573 May 21 /usr/bin/bash
$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580
vous pouvez faire quelque chose comme
ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'
alors xxx doit être le nom du processus et il ne récupérera pas grep à cause de l'ancre ^