ps переключается для совместного отображения PID, PPID, PGID и SID

40

Я пробовал ps с различными типами переключателей, например -A, aux, ef и т. Д., Но я не могу найти правильную комбинацию переключателей, которая сообщит мне идентификатор процесса (PID), идентификатор родительского процесса (PPID), группу процессов ID (PGID) и Session ID (SID) процесса в одном и том же выводе.

JohnMerlino
источник
ps -o <field>,<field>,..., Страница man содержит подробности.
Микель
@Mikel Я видел, что это уже не работает в Ubuntu 12.04
JohnMerlino
1
Это должно работать нормально. Как ты это делаешь? (Обратите внимание , что -oуправляет выходной формат, но вы все равно хотите -A, -e, -pи т.д. , чтобы выбрать , какие процессы , чтобы показать.)
Микель

Ответы:

67

Ну вот:

$ 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

Если вы также хотите увидеть имя процесса, используйте это:

$ 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
Тердон
источник
Что делают "комм" и "голова"?
ДжонМерлино
3
@JohnMerlino "comm" печатает имя команды и headпредставляет собой другую команду, не имеет ничего общего ps, она просто печатает первые N (10 по умолчанию) строк, я использовал это здесь, чтобы ограничить размер моего ответа. Все, что вам нужно знать о PS, объясняется в man ps.
Тердон
commне печатает полную команду. Например, если вы запустите python foo.py, comm покажет вам только pythonчасть, а неpython foo.py
32r34wgf3e
1
Да, вот почему я сказал , что печатает командования имя . Команда python, то foo.pyесть аргумент команды. Попробуйте, cmdесли вы хотите аргументы тоже.
Terdon
14

Пытаться

ps -efj | less

В частности, если вы хотите узнать PID / PGID / PPID / SID для определенного ProcessName или PID, попробуйте:

ps -efj | grep ProcessName

ps -efj | grep PID

ИЛИ для лучшего форматирования, попробуйте:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

ОБРАЗЕЦ:

[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
Предполагая, что 1234 является PID, и вы хотите знать связанные с ним PPID, PGID, SID & CMD
Протестировано на CentOS / RedHat 6.x и 7.x
Раман Катпалия
источник