web-dev-qa-db-fra.com

Comment faire en sorte que seuls l'utilisateur, le pid et la commande s'exécutent pour un processus spécifique? (Ubuntu 11.10)

Quand je fais ps -ef|grep python je reçois ce qui suit:

myusername  4492  2994  0 10:32 pts/0    00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665     1  0 10:42 ?        00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497  0 11:28 pts/7    00:00:00 grep --color=auto python

Comment obtenir uniquement l'utilisateur qui exécute le processus, le pid et la commande s’exécutent pour le processus comme dans la sortie suivante?

myusername  4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665 /usr/bin/python /usr/lib/system-service/system-service-d
18
Bentley4

Je suppose que vous recherchez l'argument -o:

-o format:

format défini par l'utilisateur. format est un argument unique se présentant sous la forme d'une liste séparée par des blancs ou par des virgules, qui offre un moyen de spécifier des colonnes de sortie individuelles. Les mots-clés reconnus sont décrits dans la section SPECIFICATEURS DE FORMAT STANDARD ci-dessous. Les en-têtes peuvent être renommés (ps -o pid, ruser = RealUser -o comm = Command) à volonté. Si tous les en-têtes de colonne sont vides (ps -o pid = -o comm =), la ligne d'en-tête ne sera pas sortie. La largeur de la colonne augmentera selon les besoins pour les en-têtes larges; cela peut être utilisé pour élargir des colonnes telles que WCHAN (ps -o pid, wchan = WIDE-WCHAN-COLUMN -o comm). Un contrôle de largeur explicite (ps opid, wchan: 42, cmd) est également proposé. Le comportement de ps -o pid = X, comm = Y varie avec la personnalité; la sortie peut être une colonne nommée "X, comm = Y" ou deux colonnes nommées "X" et "Y". Utilisez plusieurs options -o en cas de doute. Utilisez la variable d’environnement PS_FORMAT pour spécifier une valeur par défaut comme vous le souhaitez. DefSysV et DefBSD sont des macros pouvant être utilisées pour choisir les colonnes UNIX ou BSD par défaut.

Donc, la commande que vous voulez serait (Ubuntu):

ps -o uid,pid,cmd -ef|grep python

sous OpenSolaris, la commande est la suivante:

ps -o ruser,pid,comm -ef|grep python
12
Simon

Le plus simple serait probablement:

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

De cette façon, vous obtenez tout directement à partir de ps et n'avez pas besoin d'analyser quoi que ce soit.

De la page de manuel ps:

-o format

Format défini par l'utilisateur. format est un argument unique se présentant sous la forme d'une liste séparée par des blancs ou par des virgules, qui offre un moyen de spécifier des colonnes de sortie individuelles. [...] Les en-têtes peuvent être renommés (ps -o pid, ruser = RealUser -o comm = Command) à volonté. Si tous les en-têtes de colonne sont vides (ps -o pid = -o comm =), la ligne d'en-tête ne sera pas sortie.

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

L'option -C fonctionnera si vous exécutez python de manière interactive, et non si python exécute un script. Dans ce cas, vous devriez utiliser -C scriptname.py à la place.

3
terdon

Ma version de PS est différente, elle peut donc nécessiter quelques ajustements, mais vous pouvez utiliser couper (et éventuellement très dépendant de ce que vous essayez d’obtenir) - par exemple, quelque chose comme:

 ps ef | couper -c1-16,50- 

Fournira les caractères 1 à 16 et 50 à partir de chaque ligne de votre relevé ps. (Vos chiffres réels auront probablement besoin d'un peu de massage).

Une autre façon de le faire (mais vous perdrez le formatage) pourrait être

ps ef | tr -s "" | cut -f1,2,8- -d "" 

Ce qui compresse les espaces dans la commande ps, puis prend les champs 1, 2 et 8 et les affiche.

1
davidgo
ps -eo user,pid,cmd | grep [p]ython

Exemple:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
bmaupin  16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

Explication:

  • -e tous les processus
  • -o format défini par l'utilisateur
  • user,pid,cmd Afficher l'utilisateur, l'ID de processus, les colonnes de commande

Remarque: Si vous utilisez -f avec -e comme l'ont suggéré d'autres personnes, des erreurs risquent de se produire. En effet, ces deux paramètres contrôlent le format de sortie et un seul d'entre eux devrait être utilisé:

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
0
bmaupin