9 votes

Comment obtenir uniquement les identifiants de tous les processus en cours ?

Je sais que

ps ax

renvoie les pids

1 ?        Ss     0:01 /sbin/init
2 ?        S<     0:00 [kthreadd]
3 ?        S<     0:00 [migration/0]

Tout ce dont j'ai besoin est de nettoyer ces chaînes de caractères, mais je n'ai pas pu le faire avec sed parce que je n'ai pas pu écrire la regex appropriée. Pourriez-vous m'aider ?

22voto

Kyle Brandt Points 81077

Utilisez le formatage de sortie ps :

ps -A -o pid

Le formatage de la sortie de la commande est la meilleure option. L'option o permet de contrôler le formatage de la sortie. J'ai listé certains des arguments ci-dessous, voir 'man ps' pour le reste (pour utiliser plusieurs arguments, ce sera -o pid,cmd,flags ).

KEY   LONG         DESCRIPTION
   c     cmd          simple name of executable
   C     pcpu         cpu utilization
   f     flags        flags as in long format F field
   g     pgrp         process group ID
   G     tpgid        controlling tty process group ID
   j     cutime       cumulative user time
   J     cstime       cumulative system time
   k     utime        user time
   o     session      session ID
   p     pid          process ID

Awk ou Cut serait mieux pour obtenir des colonnes :
En général, vous ne voulez pas d'une regex pour sélectionner la première colonne, mais plutôt d'un pipe vers cut ou awk pour couper la première colonne, par exemple :

ps ax | awk '{print $1}'

Regex est une option, si ce n'est la meilleure :
Si vous utilisiez une expression rationnelle, ça pourrait être quelque chose comme :

ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'

$1 imprime uniquement ce qui a été trouvé dans la parenthèse. ^ ancre le au début de la ligne. L'astérisque d'espacement permet d'ajouter des caractères d'espacement facultatifs avant le nombre. [0-9]+ signifie un ou plusieurs chiffres. Mais je ne recommanderais pas les regex pour cette tâche particulière, vous voyez pourquoi ? :-)

6voto

Chad Huneycutt Points 2076
ps ax | awk '{ print $1; }'

5voto

drAlberT Points 10812

Utilisez le -o pour avoir une sortie au format cust

ps -o pid

La mauvaise façon d'utiliser sed, comme vous l'avez explicitement demandé, peut être

ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'

0voto

Jesus Arechiga Points 1

ps -eo pid ou ps -eo %p

-e Sélectionner tous les processus -o Format pid=process id %p identique à pid

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X