Risposte:
Senso unico:
ps -U someUserName -o pid,comm | awk '/someProcessName/{print $1}'
Si noti che è possibile ottenere più ID processo come output se sono in esecuzione più processi che corrispondono al nome utente e processo.
L' ps
output è davvero realizzato per presentazioni leggibili, non per essere elaborato in questo modo. Esistono altri strumenti per fornire un accesso di livello inferiore all'elenco dei processi in un formato più adatto allo scripting, proprio come le pgrep
librerie Perl / Python / ... e così via.
Per farlo usando solo ps
e grep
come si chiede, si potrebbe fare
ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'
Ciò includerà lo spazio bianco iniziale, ma dovrebbe essere un problema nell'applicazione, ad es
for i in $(ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'); do
kill $i
done
dovrebbe funzionare.
Ma come ho detto, pkill
è un modo più corretto e robusto e dovrebbe essere ampiamente disponibile.
awk '/name/{print $1}'
direttamente.
sed
o awk
per cominciare dal momento che il poster voleva una soluzione agnostica piattaforma (su piattaforme dove pgrep
e pkill
potrebbe non essere disponibile), e credo pgrep
/ pkill
sono più o meno altrettanto ampiamente disponibili come sed
/ awk
(che è stato il consiglio sulla domanda originale dei poster).
awk
è specificato in POSIX, quindi le probabilità sono buone che se hai un sistema con grep
, lo avrai. Lo stesso per sed
.
awk
è una scommessa migliore dised
ocut
per la selezione di bit dall'output dips
.