ps commutateurs pour afficher PID, PPID, PGID et SID collectivement

40

J'ai essayé ps avec différents types de commutateurs, par exemple -A, aux, ef, etc., mais je n'arrive pas à trouver la bonne combinaison de commutateurs qui m'indiqueront l'identificateur de processus (PID), l'identificateur de processus principal (PPID), le groupe de processus. ID (PGID) et ID de session (SID) d'un processus dans la même sortie.

JohnMerlino
la source
ps -o <field>,<field>,.... La page de manuel contient les détails.
Mikel
@ Mikel j'ai vu que cela ne fonctionne pas déjà dans Ubuntu 12.04
JohnMerlino
1
Cela devrait bien fonctionner. Comment ça se passe? (Notez que -ocontrôle le format de sortie, mais vous pouvez toujours vouloir -A, -e, -p, etc pour sélectionner les processus à afficher.)
Mikel

Réponses:

66

Voici:

$ ps  xao pid,ppid,pgid,sid | head
  PID  PPID  PGID   SID
    1     0     1     1
    2     0     0     0
    3     2     0     0
    6     2     0     0
    7     2     0     0
   21     2     0     0
   22     2     0     0
   23     2     0     0
   24     2     0     0

Si vous voulez aussi voir le nom du processus, utilisez ceci:

$ ps  xao pid,ppid,pgid,sid,comm | head
  PID  PPID  PGID   SID COMMAND
    1     0     1     1 init
    2     0     0     0 kthreadd
    3     2     0     0 ksoftirqd/0
    6     2     0     0 migration/0
    7     2     0     0 watchdog/0
   21     2     0     0 cpuset
   22     2     0     0 khelper
   23     2     0     0 kdevtmpfs
   24     2     0     0 netns
terdon
la source
Que font "comm" et "head"?
JohnMerlino
3
@JohnMerlino "comm" affiche le nom de la commande. Il heads'agit d'une commande différente. Elle n'a rien à voir avec ps. Elle affiche simplement les N premières lignes (10 par défaut). Je l'ai utilisée ici pour limiter la taille de ma réponse. Tout ce que vous devez savoir sur ps est expliqué dans man ps.
terdon
commn'imprime pas la commande complète. Par exemple, si vous courez python foo.py, comm ne vous montrera que la pythonpartie, mais paspython foo.py
32r34wgf3e
1
Oui, c'est pourquoi j'ai dit qu'il enregistrait le nom de la commande . La commande est python, le foo.pyest l'argument de la commande. Essayez cmdsi vous voulez les arguments aussi.
terdon
14

Essayer

ps -efj | less

Plus précisément, si vous souhaitez connaître le PID / PGID / PPID / SID d’un nom de processus ou d’un PID donné, essayez:

ps -efj | grep ProcessName

ps -efj | grep PID

OU pour une sortie mieux formatée, essayez:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

ÉCHANTILLON:

[ram@thinkred1cartoon ~]$ ps -ejf | egrep 'STIME|http'

UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
root      1450     1  1450  1450  0 08:45 ?        00:00:04 /usr/sbin/httpd -DFOREGROUND
ram       3717     1  2589  2589  0 08:47 ?        00:00:00 /usr/libexec/gvfsd-http --spawner :1.3 /org/gtk/gvfs/exec_spaw/1
apache   11518  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11519  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11520  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11521  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11522  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
En supposant que 1234 est un PID et que vous voulez connaître ses noms associés PPID, PGID, SID et CMD
Testé sur CentOS / RedHat 6.x et 7.x
Raman Kathpalia
la source