Solution 1 :
pgrep
Les options de sortie sont assez limitées. Vous devrez presque certainement le renvoyer via ps
pour faire sortir les informations importantes. Vous pouvez automatiser cela en utilisant une fonction bash dans votre ~/.bashrc
.
function ppgrep() { pgrep "[email protected]" | xargs --no-run-if-empty ps fp; }
Appelez ensuite la commande avec.
ppgrep <pattern>
Solution 2 :
Combinez pgrep
avec ps
en utilisant xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Par exemple, essayez
pgrep -u user | xargs ps -f -p
pour obtenir une liste complète des processus de user
. Choix -u user
limites pgrep
à l'utilisateur donné (sous forme de numéro ou de nom) tandis que le ps
choix -f -p
demander une liste au format complet pour le PID sélectionné.
C'est bien que vous gardiez la première ligne avec les noms de colonnes. grep
supprime toujours les noms de colonne.
Solution 3 :
Ce qui suit ne vous donne que le PID + la ligne de commande complète. Pour "toutes les infos ps
fait", voir les autres réponses...
La plupart des Linux utilisent procps-ng. Depuis la version 3.3.4 (publiée en 2012), pgrep -a
(--list-full
) affiche la ligne de commande complète.
Remarque :Par défaut, pgrep ne correspond qu'au modèle que vous donnez avec le nom de l'exécutable. Si vous voulez faire correspondre la ligne de commande complète (comme le fait grep ps), ajoutez le -f
(--full
).
Dans les anciennes versions (y compris le projet original procps), -l
l'option affichait des informations mais son comportement variait :
pgrep -fl
correspondait au modèle par rapport à la ligne de commande complète et affichait la ligne de commande complète.pgrep -l
seul ne correspondait qu'au nom de l'exécutable et n'affichait que le nom de l'exécutable.
Si vous ne voulez pas de correspondance complète, vous ne pouvez pas voir la ligne de commande complète :-([https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15]
Je ne sais pas quel code *BSD utilise mais leur page de manuel documente l'ancien -fl
comportement.
Malheureusement, vous ne pouvez même pas utiliser -fl
portable - dans le récent procps-ng, -f
(--list-name
) imprime toujours uniquement le nom de l'exécutable.
Solution 4 :
Linux
Pour la version GNU de pgrep
la sortie longue + floue est obtenue avec -af
et la chaîne doit être sensible à la casse (c'est-à-dire il n'y a pas d'option pour l'insensibilité à la casse ).
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
Page de manuel :
-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.
MacOS
Sur OSX (et par inférence, sur BSD) -l
(sortie longue ) en combinaison avec -f
(correspond à des listes complètes d'arguments ) affichera la commande complète (-i
ajoute une insensibilité à la casse) :
$ pgrep -fil ssh
OUTPUT:
33770 ssh: [email protected] [mux] t
La page de manuel :
-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.
Solution 5 :
Utilisez l'option -v pour grep - il renvoie tout SAUF le modèle demandé.
ps -ef | grep <process> | grep -v grep