Soluzione 1:
pgrep
Le opzioni di output di sono piuttosto limitate. Quasi sicuramente dovrai rispedirlo tramite ps
per ottenere le informazioni importanti. Puoi automatizzarlo usando una funzione bash nel tuo ~/.bashrc
.
function ppgrep() { pgrep "[email protected]" | xargs --no-run-if-empty ps fp; }
Quindi chiama il comando con.
ppgrep <pattern>
Soluzione 2:
Combina pgrep
con ps
utilizzando 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
. Opzione -u user
limiti pgrep
all'utente dato (come numero o nome) mentre ps
opzioni -f -p
richiedere un elenco in formato completo per il PID selezionato.
È bello mantenere la prima riga con i nomi delle colonne. grep
elimina sempre i nomi delle colonne.
Soluzione 3:
Quanto segue fornisce solo PID + riga di comando completa. Per "tutte le informazioni ps
fa", vedi altre risposte...
La maggior parte dei Linux usa procps-ng. Dalla 3.3.4 (rilasciata nel 2012), pgrep -a
(--list-full
) mostra la riga di comando completa.
Nota:per impostazione predefinita, pgrep confronta solo il modello che fornisci con il nome dell'eseguibile. Se vuoi confrontare con l'intera riga di comando (come fa grepping ps), aggiungi -f
(--full
) opzione.
Nelle versioni precedenti (incluso il progetto procps originale), -l
opzione mostrava informazioni ma il suo comportamento variava:
pgrep -fl
ha confrontato il modello con la riga di comando completa e ha mostrato la riga di comando completa.pgrep -l
alone corrispondeva solo al nome dell'eseguibile e mostrava solo il nome dell'eseguibile.
Se non vuoi una corrispondenza completa, non puoi vedere la riga di comando completa :-([https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15]
Non sono sicuro di quale codice usi *BSD ma la loro pagina man documenta il vecchio -fl
comportamento.
Sfortunatamente non puoi nemmeno usare -fl
portably - nel recente procps-ng, -f
(--list-name
) stampa sempre solo il nome dell'eseguibile.
Soluzione 4:
Linux
Per la versione GNU di pgrep
l'output long + fuzzy si ottiene con -af
e la stringa deve essere sensibile alle maiuscole (vale a dire non c'è alcuna opzione per la distinzione tra maiuscole e minuscole ).
$ 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
(corrispondenza con elenchi di argomenti completi ) visualizzerà il comando completo (-i
aggiunge distinzione tra maiuscole e minuscole):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: [email protected] [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.
Soluzione 5:
Usa l'opzione -v per grep - restituisce tutto MA il modello richiesto.
ps -ef | grep <process> | grep -v grep