2014-09-09 6 views
24

Come ottenere solo l'ID di processo per un nome di processo specificato in linux?Come ottenere solo l'ID di processo nel nome del processo specificato in linux?

ps -ef|grep java  
test 31372 31265 0 13:41 pts/1 00:00:00 grep java 

In base all'ID di processo, scriverò un po 'di logica. Quindi, come posso ottenere solo l'ID di processo per un nome di processo specifico.

Esempio di programma:

PIDS= ps -ef|grep java 
if [ -z "$PIDS" ]; then 
echo "nothing" 
else 
mail [email protected] 
fi 

risposta

30

È possibile utilizzare:

ps -ef | grep '[j]ava' 

O se pgrep è disponibile quindi meglio usare:

pgrep -f java 
+2

ho provato entrambi i comandi, ma pgrep sta lavorando quello che expected.But un primo 'ps -ef | grep '[j] ava'' non funziona. – openquestion

+0

Come ho detto 'pgrep' è molto più affidabile, quindi usalo se disponibile. Il comando 'ps' e le sue opzioni dipendono molto dalla piattaforma. – anubhava

21

Utilizzare questa: ps -C <name> -o pid=

+5

Perché questo è stato rifiutato? Non solo sembra funzionare, ma lo fa usando il comando desiderato ps, e senza filtri per pipe. Nel mio caso, non ho potuto usare tubi (motivi ..) quindi questo è stato un vero toccasana. Potresti passare un giorno intero a leggere la pagina man per PS ... grazie a @ventsyv –

+0

Forse perché non è estremamente portabile, ma anche in questo caso le altre soluzioni non lo sono, e la domanda originale è stata codificata con Redhat Linux. Mi è capitato di vedere un commit da parte di uno dei miei ingegneri che aveva bisogno di un modo portatile per rilevare uno specifico processo java su OSX, RHEL Linux e AIX, e questo è quello che hanno escogitato: 'ps -A -o pid, args | grep \ [j] ava'. – Moreaki

35

È possibile reindirizzare l'output su awk per stampare solo il PID. Per esempio:

ps -ef | grep nginx | awk '{print $2}' 
9439 
-1
adb shell procrank | grep TYPE_YOUR_PROCESS_NAME_INSTEAD | awk '{print $1}'