Risposte:
pgrep
Le opzioni di output sono piuttosto limitate. Avrai quasi sicuramente bisogno di rispedirlo ps
per 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>
ps
necessario un trattino per le bandiere:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
che eseguirà il comando solo se ha ricevuto un elenco.
ps fp $(pgrep -d, "$@")
Combina pgrep
con l' ps
utilizzo 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. grep
elimina sempre i nomi delle colonne.
Quanto segue fornisce solo PID + riga di comando completa. Per "tutte le informazioni ps
fanno", 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' -l
opzione 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 -l
da 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 -fl
comportamento.
Sfortunatamente non puoi nemmeno usarlo in modo -fl
portabile - negli ultimi procps-ng, -f
( --list-name
) stampa sempre solo il nome dell'eseguibile.
Per la versione GNU pgrep
del -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 ( -i
aggiunge 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 grep
per escludere eventuali processi grep.
Per eliminare il grep
processo, è possibile utilizzare le parentesi come parte del modello:
ps -ef | grep '[t]ty'
Puoi farlo con ps
e 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 interops
megilla di utilizzo.