ps cambia para mostrar PID, PPID, PGID y SID colectivamente

39

Intenté ps con diferentes tipos de interruptores, por ejemplo, -A, aux, ef, etc., pero parece que no puedo encontrar la combinación correcta de interruptores que me indique la ID de proceso (PID), la ID de proceso principal (PPID), el Grupo de procesos ID (PGID) e ID de sesión (SID) de un proceso en la misma salida.

JohnMerlino
fuente
ps -o <field>,<field>,.... La página del manual tiene los detalles.
Mikel
@Mikel Vi que ya no funciona en ubuntu 12.04
JohnMerlino
1
Debería funcionar bien. Como lo estas ejecutando (Tenga en cuenta que -ocontrola el formato de salida, pero es posible que aún desea -A, -e, -p, etc para seleccionar los procesos que desea mostrar.)
Mikel

Respuestas:

66

Aqui tienes:

$ 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 desea ver también el nombre del proceso, use esto:

$ 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
fuente
¿Qué hacen "comm" y "head"?
JohnMerlino
3
@JohnMerlino "comm" imprime el nombre del comando y heades un comando diferente, no tiene nada que ver ps, solo imprime las primeras N (10 por defecto) líneas, lo usé aquí para limitar el tamaño de mi respuesta. Todo lo que necesita saber sobre ps se explica en man ps.
terdon
commno imprime el comando completo. Por ejemplo, si corres python foo.py, comm solo te mostrará la pythonparte, pero nopython foo.py
32r34wgf3e
1
Sí, por eso dije que imprime el nombre del comando . El comando es python, el foo.pyes el argumento del comando. Intenta cmdsi quieres los argumentos también.
terdon
13

Tratar

ps -efj | less

Específicamente, si desea averiguar PID / PGID / PPID / SID para un determinado ProcessName o PID, intente:

ps -efj | grep ProcessName

ps -efj | grep PID

O para una salida con mejor formato, intente:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

MUESTRA:

[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
Suponiendo que 1234 es PID y desea conocer sus PPID, PGID, SID y CMD asociados
Probado en CentOS / RedHat 6.xy 7.x
Raman Kathpalia
fuente