Réponses:
pgrep
Les options de sortie de sont assez limitées. Vous devrez certainement le renvoyer ps
pour 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>
ps
faut un trait d'union pour les drapeaux:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
qui n'exécutera la commande que si elle a reçu une liste.
ps fp $(pgrep -d, "$@")
Combinez pgrep
avec l' ps
utilisation 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. grep
supprime toujours les noms de colonne.
-u
= correspond uniquement aux processus dont l'ID utilisateur effectif est répertorié (voir pgrep
référence linux.die.net/man/1/pgrep ) -f
= liste complète, -p
= sélectionner par PID (voir ps
référence - man7.org/linux/man -pages / man1 / ps.1.html )
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' -l
option 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 -l
seul ne correspondait qu'au nom de l'exécutable et ne montrait que le nom de l'exécutable. Vous ne savez pas quel code * BSD utilise, mais leur page de manuel documente l'ancien -fl
comportement.
Malheureusement, vous ne pouvez même pas l'utiliser de manière -fl
portable - dans le récent procps-ng, -f
( --list-name
) affiche toujours uniquement le nom de l'exécutable.
Pour la version GNU de pgrep
la -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
-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.
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 ( -i
ajoute 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.
Utilisez l'option -v pour grep - elle renvoie tout MAIS le motif demandé.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
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 grep
pour exclure tout processus grep.
Afin d'éliminer le grep
processus, vous pouvez utiliser des crochets dans le cadre de votre modèle:
ps -ef | grep '[t]ty'
Vous pouvez le faire avec ps
et pgrep
:
ps -fp $(pgrep -d, tty)
Cela vous aidera, je suppose:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
Sinon, si aucun processus ne correspond à votre recherche, ilps
vide toute une mégilla d'utilisation.