ps สลับไปแสดง PID, PPID, PGID และ SID รวม


38

ฉันลองใช้ ps ด้วยสวิตช์ชนิดต่าง ๆ เช่น -A, aux, ef และอื่น ๆ แต่ฉันไม่สามารถหาชุดที่ถูกต้องของสวิตช์ที่จะบอก ID กระบวนการ (PID), ID กระบวนการหลัก (PPID), กลุ่มกระบวนการ ID (PGID) และ Session ID (SID) ของกระบวนการในเอาต์พุตเดียวกัน


ps -o <field>,<field>,.... หน้าคนมีรายละเอียด
Mikel

@Mikel ฉันเห็นว่าแล้วมันไม่ทำงานใน Ubuntu 12.04
JohnMerlino

1
มันควรจะทำงานได้ดี คุณเป็นอย่างไรบ้าง (โปรดสังเกตว่า-oการควบคุมรูปแบบการออก แต่คุณอาจยังคงต้องการ-A, -e, -pฯลฯ เพื่อเลือกซึ่งกระบวนการที่จะแสดง.)
มิเกล

คำตอบ:


64

ไปเลย:

$ 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

"comm" และ "head" ทำอะไร?
JohnMerlino

3
@JohnMerlino "comm" พิมพ์ชื่อคำสั่งและheadเป็นคำสั่งอื่นไม่มีอะไรเกี่ยวข้องกับpsมันเพียงพิมพ์บรรทัดแรก N (10 โดยค่าเริ่มต้น) ฉันใช้ที่นี่เพื่อ จำกัด ขนาดคำตอบของฉัน ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับ PS man psมีการอธิบายใน
terdon

commไม่พิมพ์คำสั่งเต็ม เช่นถ้าคุณวิ่งpython foo.pycomm จะแสดงเฉพาะpythonส่วน แต่ไม่ใช่python foo.py
32r34wgf3e

1
ใช่ว่าเป็นเหตุผลที่ผมบอกว่ามันพิมพ์คำสั่งของชื่อ คำสั่งเป็นpythonที่foo.pyโต้แย้งคำสั่งของ ลองcmdถ้าคุณต้องการข้อโต้แย้งเช่นกัน
terdon

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.