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.
Juste Grep loin de Grep lui-même!
process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
Avez-vous essayé d'utiliser pidof ABCD
?
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
ps a une option pour ça:
process_id=`/bin/ps -C ABCD -o pid=`
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}'
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