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
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
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.
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.
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'utilisateuruser,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