ps перемикає для відображення PID, PPID, PGID та SID разом


39

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


ps -o <field>,<field>,.... На сторінці чоловіка є деталі.
Мікель

@Mikel Я бачив, що це вже не працює в ubuntu 12.04
JohnMerlino

1
Це має добре працювати. Як ти це працюєш? (Зверніть увагу , що -oуправляє вихідний формат, але ви все одно хочете -A, -e, -pі т.д. , щоб вибрати , які процеси , щоб показати.)
Мікель

Відповіді:


66

Ось вам:

$ 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.
terdon

commне друкує повну команду. Напр., Якщо ви запустили python foo.py, комунікатор покаже лише вашу pythonчастину, але неpython foo.py
32r34wgf3e

1
Так, ось чому я сказав , що друкує командування ім'я . Команда є python, foo.pyце аргумент команди. Спробуйте, cmdякщо ви хочете і аргументів.
тердон

13

Спробуйте

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.