Come ottenere pgrep per visualizzare informazioni complete sul processo


26

C'è un modo per pgrepdarmi tutte le informazioni su ogni processo che psfa? So che posso pspassare attraverso, grepma questo è un sacco di digitazione e mi dà anche il grepprocesso stesso che non voglio.

Risposte:


22

pgrepLe opzioni di output sono piuttosto limitate. Avrai quasi sicuramente bisogno di rispedirlo psper ottenere le informazioni importanti. Puoi automatizzare questo usando una funzione bash nel tuo ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

Quindi chiamare il comando con.

ppgrep <pattern>

2
Grazie! L'ho modificato in: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } Altrimenti, se nessun processo corrisponde alla tua ricerca, scarica un intero psmegilla di utilizzo.
JoelFan il

Su OS X, è psnecessario un trattino per le bandiere:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
Se vuoi evitare la pagina di utilizzo di ps, GNU xargs ha un'opzione, -rche eseguirà il comando solo se ha ricevuto un elenco.
Doug,

1
Il modo più conciso èps fp $(pgrep -d, "$@")
Igor Mikushkin il

14

Combina pgrepcon l' psutilizzo xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

Ad esempio, prova

pgrep -u user | xargs ps -f -p

per ottenere un elenco completo dei processi di user.

È bello che tu mantenga la prima riga con i nomi delle colonne. grepelimina sempre i nomi delle colonne.


eccellente! questo risolve uno strano problema con lo script di avvio del server arcgis per xfvb
prusswan

Questa dovrebbe essere la risposta accettata, perché utilizza le pipe unix in modo corretto, prendendo un elenco di PID da uno strumento e inserendone un altro (se sembra un hacker, non lo è - questa tecnica può essere utilizzata in MOLTI strumenti UNIX , come gli strumenti di posta elettronica grep. La funzione Bash ppgrep () è una dipendenza non necessaria ed evita di confrontarsi con l'opportunità di apprendimento presentata qui.)
Scott Prive

10

Quanto segue fornisce solo PID + riga di comando completa. Per "tutte le informazioni psfanno", vedi altre risposte ...

La maggior parte dei Linux usa procps-ng . Da 3.3.4 (rilasciato nel 2012), pgrep -a( --list-full) mostra l'intera riga di comando.
Nota: per impostazione predefinita pgrep corrisponde solo al modello fornito rispetto al nome dell'eseguibile. Se vuoi abbinare l'intera riga di comando (come fa grepping ps), aggiungi l' opzione -f( --full).

Nelle versioni precedenti (incluso il progetto procps originale ), l' -lopzione mostrava informazioni ma il suo comportamento variava:

  • pgrep -fl ha abbinato il modello alla riga di comando completa e ha mostrato la riga di comando completa.
  • pgrep -lda solo corrispondeva solo al nome dell'eseguibile e mostrava solo il nome dell'eseguibile.
    Se non si desidera la corrispondenza completa, non è possibile visualizzare l'intera riga di comando :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

Non sono sicuro di quale codice * BSD usi ma la loro pagina man documenta il vecchio -flcomportamento.

Sfortunatamente non puoi nemmeno usarlo in modo -flportabile - negli ultimi procps-ng, -f( --list-name) stampa sempre solo il nome dell'eseguibile.


4

Linux

Per la versione GNU pgrepdel -i(caso-insensibilità) non è supportato, e lungo + uscita fuzzy realizzato con -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

Pagina man :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

Mac OS

Su OSX (e per deduzione, su BSD) -l( output lungo ) in combinazione con -f( match contro elenchi di argomenti completi ) verrà visualizzato il comando completo ( -iaggiunge la distinzione tra maiuscole e minuscole):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

La pagina man :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

Usa l'opzione -v per grep - restituisce tutto MA il modello richiesto.

ps -ef | grep <process> | grep -v grep

Questa è stata la risposta migliore per me. Ti mostra il comando completo senza essere troncato come accade conpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

Non credo che ci sia, la maggior parte delle informazioni che puoi ottenere sono il nome e l'id del processo usando l'opzione -l per pgrep.

ps supporta tutti i tipi di opzioni di formattazione, quindi vorrei solo creare un alias per ciò che si desidera salvare la digitazione. Un modo semplice per escludere dall'output il processo grep per includere un pipe aggiuntivo grep -v grepper escludere eventuali processi grep.


0

Per eliminare il grepprocesso, è possibile utilizzare le parentesi come parte del modello:

ps -ef | grep '[t]ty'

Puoi farlo con pse pgrep:

ps -fp $(pgrep -d, tty)

-1

Questo ti aiuterà immagino:

ps auxww


2
Puoi per favore elaborare. Maggiori informazioni migliorerebbero questa risposta
Dave M
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.