Simula pgrep usando semplicemente grep


1

Come posso fare pgrep -U someUserNameusando solo pse grep? Non conto di pgrepessere impostato in un sistema?

Risposte:


1

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' psoutput è 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 pgreplibrerie Perl / Python / ... e così via.


Per farlo usando solo ps e grepcome 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è una scommessa migliore di sedo cutper la selezione di bit dall'output di ps.
Blrfl

@Blrfl: vero, collassa bene lo spazio bianco. Aggiornerà la risposta.
Daniel Andersson,

Si potrebbe anche usare awk '/name/{print $1}'direttamente.
gravità

@grawity: anche vero, un'altra soluzione. Come sidenote non volevo davvero usare sedo awkper cominciare dal momento che il poster voleva una soluzione agnostica piattaforma (su piattaforme dove pgrepe pkillpotrebbe non essere disponibile), e credo pgrep/ pkillsono più o meno altrettanto ampiamente disponibili come sed/ awk(che è stato il consiglio sulla domanda originale dei poster).
Daniel Andersson,

awkè specificato in POSIX, quindi le probabilità sono buone che se hai un sistema con grep, lo avrai. Lo stesso per sed.
Blrfl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.