2013-07-03 22 views
36

Utilizzando "ucbps" comando io sono in grado di ottenere tutti i PIDCome ottenere il PID del processo specificando il nome del processo e memorizzandolo in una variabile da utilizzare ulteriormente?

$ ucbps 

    Userid  PID  CPU % Mem % FD Used Server     Port 
    ========================================================================= 

    512  5783 2.50 16.30 350  managed1_adrrtwls02  61001 
    512  8896 2.70 21.10 393  admin_adrrtwls02  61000 
    512  9053 2.70 17.10 351  managed2_adrrtwls02  61002 

che voglio fare in questo modo, ma non so come fare

  1. variabile = ottenere pid del processo per nomeprocesso.
  2. Quindi utilizzare questo comando kill -9 variabile.

risposta

66

Se si vuole uccidere -9 sulla base di una stringa (si potrebbe desiderare di provare a uccidere prima) si può fare qualcosa di simile:

ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " $1}' 

Questo ti mostrerà ciò che si sta per uccidere (molto, molto importante) e solo il tubo a sh quando arriva il momento di eseguire:

ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " $1}' | sh 
+0

un modo per evitare "grep -v grep" è utilizzare "grep " in modo da interpolare la stringa e il nome del processo [e] non viene trovato quando viene eseguito il primo grep, se ciò ha senso. – spig

+3

Penso che sia più semplice pgrep -f | awk '{stampa "kill -9" $ 1}' | sh –

51
pids=$(pgrep <name>) 

gli otterrà i PID di tutti i processi con il nome dato. Per ucciderli tutti, utilizzare

kill -9 $pids 

a non utilizzare una variabile e direttamente uccidere tutti i processi con un dato questione del nome

pkill -9 <name> 
+0

$ pids = $ (pgrep admin_adrrtwls02) $ kill -9 $ pids Uso: kill [-l] [-n signum] [-s signame] lavoro ... Oppure: kill [opzioni] -l [arg ...] – Nidhi

+0

I programmi Unix tendono a stampare la loro descrizione di utilizzo quando non vengono forniti argomenti. Nel tuo esempio, molto probabilmente non è stato trovato alcun processo con il nome admin_adrrtwls02. Pertanto $ pids valuta la stringa vuota e kill viene eseguito senza un argomento id di processo. pgrep cerca un nome di processo, non il nome utente. Ma ci sono anche i flag -u e -U per limitare pgrep a determinati ID utente. – XZS

+0

c'era un processo con questo nome admin_adrrtwls02. La risposta sopra di Ben ha risolto il mio problema. La sua soluzione ha funzionato. – Nidhi

7

Un'altra possibilità sarebbe quella di utilizzare pidof si tratta di solito con la maggior parte delle distribuzioni. Ti restituirà il PID di un dato processo usando il suo nome.

pidof process_name 

In questo modo è possibile memorizzare le informazioni in una variabile ed eseguire kill -9 su di esso.

#!/bin/bash 
pid=`pidof process_name` 
kill -9 $pid 
11

su una sola riga ...

pgrep -f process_name | xargs kill -9 
+0

Come già menzionato in altri commenti, il parametro '-f' potrebbe essere utile qui ' -f Il modello normalmente corrisponde solo al nome del processo. Quando -f è impostato, viene utilizzata la riga di comando completa. 'pgrep -f nome_ processo | xargs kill -9' –

0

uso grep [n] ame per rimuovere nome che grep -v questo è il primo ... Sec utilizzando xargs nel modo in cui spetta non vi è alcun errore su rnu, qualunque sia il vostro piping, dovete usare -i (modalità interattiva) altrimenti potreste avere problemi con il comando.

ps axf | grep | grep -v grep | awk '{print "kill -9" $ 1}'? ps aux | grep [n] ame | awk '{print "kill -9" $ 2} "? non è meglio?

+0

ancora meglio: nome pidof | xargs -i kill -9 {}? no ? –

Problemi correlati