Risposte:
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>
psnecessario un trattino per le bandiere:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-rche eseguirà il comando solo se ha ricevuto un elenco.
ps fp $(pgrep -d, "$@")
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.
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. 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.
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
-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.
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.
Usa l'opzione -v per grep - restituisce tutto MA il modello richiesto.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
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.
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)
Questo ti aiuterà immagino:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }Altrimenti, se nessun processo corrisponde alla tua ricerca, scarica un interopsmegilla di utilizzo.