ps beralih untuk menampilkan PID, PPID, PGID, dan SID secara kolektif

39

Saya mencoba ps dengan berbagai jenis switch misalnya -A, aux, ef, dan sebagainya tetapi saya tidak bisa menemukan kombinasi yang tepat dari switch yang akan memberi tahu saya ID Proses (PID), ID Proses Induk (PPID), Grup Proses ID (PGID), dan ID Sesi (SID) dari suatu proses dalam output yang sama.

JohnMerlino
sumber
ps -o <field>,<field>,.... Halaman manual memiliki detailnya.
Mikel
@Mikel Saya melihat bahwa sudah tidak berfungsi di ubuntu 12.04
JohnMerlino
1
Seharusnya bekerja dengan baik. Bagaimana Anda menjalankannya? (Perhatikan bahwa -okontrol format output, tetapi Anda mungkin masih ingin -A, -e, -p, dll untuk memilih yang memproses untuk ditampilkan.)
Mikel

Jawaban:

66

Ini dia:

$ 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

Jika Anda ingin melihat nama proses juga, gunakan ini:

$ 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
sumber
Apa yang dilakukan "comm" dan "head"?
JohnMerlino
3
@JohnMerlino "comm" mencetak nama perintah dan headmerupakan perintah yang berbeda, tidak ada hubungannya ps, hanya mencetak garis N (10 secara default) pertama, saya menggunakannya di sini untuk membatasi ukuran jawaban saya. Semua yang perlu Anda ketahui tentang ps dijelaskan di man ps.
terdon
commtidak mencetak perintah lengkap. Misalnya, jika Anda berlari python foo.py, comm hanya akan menampilkan pythonbagian itu, tetapi tidakpython foo.py
32r34wgf3e
1
Ya, itu sebabnya aku mengatakan itu mencetak perintah ini nama . Perintahnya adalah python, foo.pyargumen perintah itu. Coba cmdjika Anda ingin argumen juga.
terdon
13

Mencoba

ps -efj | less

Khususnya, jika Anda ingin mengetahui PID / PGID / PPID / SID untuk Nama Proses atau PID tertentu, Coba:

ps -efj | grep ProcessName

ps -efj | grep PID

ATAU untuk output dengan format yang lebih baik, coba:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

MENCICIPI:

[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
Dengan asumsi 1234 adalah PID dan Anda ingin tahu PPID, PGID, SID & CMD yang terkait
Diuji pada CentOS / RedHat 6.x & 7.x
Raman Kathpalia
sumber