Comment faire pour que pgrep affiche toutes les informations sur le processus

27

Existe-t-il un moyen de me pgrepdonner toutes les informations sur chaque processus qui le psfait? Je sais que je peux pspasser à travers, grepmais c'est beaucoup de saisie et cela me donne également le grepprocessus lui-même que je ne veux pas.

JoelFan
la source

Réponses:

22

pgrepLes options de sortie de sont assez limitées. Vous devrez certainement le renvoyer pspour diffuser les informations importantes. Vous pouvez automatiser cela en utilisant une fonction bash dans votre ~/.bashrc.

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

Appelez ensuite la commande avec.

ppgrep <pattern>
Dan Carley
la source
2
Merci! Je l'ai modifié pour: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } Sinon, si aucun processus ne correspond à votre recherche, il psvide toute une mégilla d'utilisation.
JoelFan
Sous OS X, il psfaut un trait d'union pour les drapeaux:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch
1
Si vous voulez éviter la page d'utilisation de ps, GNU xargs a une option, -rqui n'exécutera la commande que si elle a reçu une liste.
Doug
1
La manière la plus concise estps fp $(pgrep -d, "$@")
Igor Mikushkin
15

Combinez pgrepavec l' psutilisation 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 user.

C'est bien que vous gardiez la première ligne avec les noms des colonnes. grepsupprime toujours les noms de colonne.

nalply
la source
excellent! cela résout un problème étrange avec le script de démarrage du serveur arcgis pour xfvb
prusswan
Cela devrait être la réponse acceptée, car elle utilise les tuyaux Unix de manière appropriée, en prenant une liste de PID d'un outil et en réinjectant dans un autre (si cela ressemble à du piratage, ce n'est pas le cas - cette technique peut être utilisée dans BEAUCOUP d'outils UNIX , comme les outils de messagerie grep. La fonction Bash ppgrep () est une dépendance inutile, et évite de confronter l'opportunité d'apprentissage présentée ici.)
Scott Prive
Pour expliquer les options - -u= correspond uniquement aux processus dont l'ID utilisateur effectif est répertorié (voir pgrepréférence linux.die.net/man/1/pgrep ) -f= liste complète, -p= sélectionner par PID (voir psréférence - man7.org/linux/man -pages / man1 / ps.1.html )
Chris Halcrow il y a
10

Ce qui suit ne vous donne que PID + ligne de commande complète. Pour "toutes les infos ps", voir les autres réponses ...

La plupart des linux utilisent procps-ng . Depuis 3.3.4 (publié en 2012), pgrep -a( --list-full) affiche la ligne de commande complète.
Remarque: Par défaut, pgrep ne fait correspondre que le modèle que vous donnez avec le nom de l'exécutable. Si vous souhaitez faire correspondre la ligne de commande complète (comme le fait le ps de grepping), ajoutez l' option -f( --full).

Dans les anciennes versions (y compris le projet procps d' origine ), l' -loption montrait des informations mais son comportement variait:

  • pgrep -fl fait correspondre le modèle avec la ligne de commande complète et a montré la ligne de commande complète.
  • pgrep -lseul ne correspondait qu'au nom de l'exécutable et ne montrait 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 ]

Vous ne savez pas quel code * BSD utilise, mais leur page de manuel documente l'ancien -flcomportement.

Malheureusement, vous ne pouvez même pas l'utiliser de manière -flportable - dans le récent procps-ng, -f( --list-name) affiche toujours uniquement le nom de l'exécutable.

Beni Cherniavsky-Paskin
la source
4

Linux

Pour la version GNU de pgrepla -i(insensibilité à la casse) n'est pas prise en charge, et une sortie longue + floue est obtenue avec -af.

$ 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 déduction, sur BSD) -l( sortie longue ) en combinaison avec -f( correspondance avec les listes d'arguments complètes ) affichera la commande complète ( -iajoute une insensibilité à la casse):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [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.
ccpizza
la source
1

Utilisez l'option -v pour grep - elle renvoie tout MAIS le motif demandé.

ps -ef | grep <process> | grep -v grep
baumgart
la source
C'était la meilleure réponse pour moi. Il vous montre la commande complète sans être tronqué comme cela arrive avecpgrep -u user | xargs ps -f -p
BringBackCommodore64
0

Je ne pense pas qu'il y en ait, la plupart des informations que vous pouvez obtenir sont le nom et l'identifiant du processus en utilisant l'option -l pour pgrep.

ps prend en charge toutes sortes d'options de formatage, donc je voudrais simplement créer un alias pour ce que vous voulez enregistrer. Un moyen simple d'exclure le processus grep de la sortie nous pour inclure un canal supplémentaire grep -v greppour exclure tout processus grep.

Kyle Brandt
la source
0

Afin d'éliminer le grepprocessus, vous pouvez utiliser des crochets dans le cadre de votre modèle:

ps -ef | grep '[t]ty'

Vous pouvez le faire avec pset pgrep:

ps -fp $(pgrep -d, tty)
En pause jusqu'à nouvel ordre.
la source
-1

Cela vous aidera, je suppose:

ps auxww

Blagoy Genadiev
la source
2
Pouvez-vous s'il vous plaît élaborer. Plus d'informations amélioreraient cette réponse
Dave M