ps przełącza się na zbiorcze wyświetlanie PID, PPID, PGID i SID

39

Próbowałem ps z różnymi rodzajami przełączników np. -A, aux, ef itd., Ale nie mogę znaleźć właściwej kombinacji przełączników, która powie mi ID procesu (PID), nadrzędny identyfikator procesu (PPID), grupę procesów ID (PGID) i identyfikator sesji (SID) procesu na tym samym wyjściu.

JohnMerlino
źródło
ps -o <field>,<field>,.... Strona podręcznika zawiera szczegółowe informacje.
Mikel
@Mikel Widziałem, że już nie działa w Ubuntu 12.04
JohnMerlino
1
Powinno działać dobrze. Jak to działa? (Należy pamiętać, że -okontroluje format, ale może nadal chcesz -A, -e, -pitd wybrać, które przetwarza się pokazać.)
Mikel

Odpowiedzi:

66

Proszę bardzo:

$ 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

Jeśli chcesz zobaczyć także nazwę procesu, użyj tego:

$ 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
źródło
Co robi „comm” i „head”?
JohnMerlino
3
@JohnMerlino „comm” drukuje nazwę polecenia i headjest innym poleceniem, nie ma z pstym nic wspólnego , po prostu drukuje pierwsze N ​​(domyślnie 10) linii, użyłem go tutaj, aby ograniczyć rozmiar mojej odpowiedzi. Wszystko, co musisz wiedzieć o psie, wyjaśniono w man ps.
terdon
commnie drukuje pełnego polecenia. Np. Jeśli uruchomisz python foo.py, comm pokaże ci tylko pythonczęść, ale niepython foo.py
32r34wgf3e 29.01.2018
1
Tak, dlatego powiedziałem, że drukuje komendy za nazwę . Polecenie to python, foo.pyjest argumentem za komendę. Spróbuj, cmdjeśli chcesz też argumentów.
terdon
13

Próbować

ps -efj | less

W szczególności, jeśli chcesz znaleźć PID / PGID / PPID / SID dla określonego ProcessName lub PID, spróbuj:

ps -efj | grep ProcessName

ps -efj | grep PID

LUB, aby uzyskać lepiej sformatowane dane wyjściowe, spróbuj:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

PRÓBA:

[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
Zakładając, że 1234 to PID i chcesz poznać powiązane z nim PPID, PGID, SID i CMD
Testowane na CentOS / RedHat 6.x i 7.x
Raman Kathpalia
źródło