web-dev-qa-db-fra.com

Obtenir le PID du processus dans le script shell

J'écris un script Shell et je souhaite obtenir le PID d'un processus portant le nom "ABCD". Ce que j'ai fait était:

process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`

Cela obtient le PID de deux processus, à savoir le processus ABCD et la commande GREP elle-même, que se passe-t-il si je ne souhaite pas que le PID de GREP soit exécuté et que je ne souhaite que le processus ABCD?

Veuillez suggérer.

12
Mayank Jain

Juste Grep loin de Grep lui-même!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
34
blue

Avez-vous essayé d'utiliser pidof ABCD?

22
wizard

C'est très simple.ABCDdoit être remplacé par le nom de votre processus. 

#!/bin/bash

processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }')
echo $processId

Parfois, vous devez remplacerABCDpar le nom du logiciel. Exemple - si vous exécutez un programme Java tel que Java -jar TestJar.jar &, vous devez remplacerABCDpar TestJar.jar

3
Rejuan

ps a une option pour ça:

process_id=`/bin/ps -C ABCD -o pid=`
1
Salvador Fonseca

Vous pouvez également supprimer grep et utiliser uniquement awk.
Utilisez awk ' expression matching pour faire correspondre le nom du processus mais pas lui-même. 

/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'
0
Gino Mempin

Vous pouvez utiliser cette commande pour grep le pid d'un processus particulier et echo $ b pour imprimer le pid de tout processus en cours

b = ps -ef | grep [f]irefox | awk '{ printf $2 }'

echo $ b

0
Sandeep Singh