37

I tried ps with different kinds of switches e.g. -A, aux, ef, and so forth but I cannot seem to find the right combination of switches that will tell me the Process ID (PID), Parent Process ID (PPID), Process Group ID (PGID), and the Session ID (SID) of a process in the same output.

  • ps -o <field>,<field>,.... The man page has the details. – Mikel Jul 12 '13 at 1:39
  • @Mikel I saw that already it doesnt work in ubuntu 12.04 – JohnMerlino Jul 12 '13 at 1:42
  • 1
    It should work fine. How are you running it? (Note that -o controls the output format, but you might still want -A, -e, -p, etc to select which processes to show.) – Mikel Jul 12 '13 at 1:44
61

Here you go:

$ 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

If you want to see the process' name as well, use this:

$ 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
  • What does "comm" and "head" do? – JohnMerlino Jul 12 '13 at 14:49
  • 3
    @JohnMerlino "comm" prints the command name and head is a different command, nothing to do with ps, it just prints the first N (10 by default) lines, I used it here to limit the size of my answer. Everything you need to know about ps is explained in man ps. – terdon Jul 12 '13 at 15:09
  • comm does not print the full command. E.g, if you run python foo.py, comm will only show you the python part, but not python foo.py – 32r34wgf3e Jan 29 '18 at 22:19
  • Yes, that's why I said it prints the command's name. The command is python, the foo.py is the command's argument. Try cmd if you want the arguments too. – terdon Jan 29 '18 at 22:26
12

Try

ps -efj | less

Specifically, if you want to find out PID/PGID/PPID/SID for a certain ProcessName or PID, Try:

ps -efj | grep ProcessName

ps -efj | grep PID

OR for better-formatted output, try:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

SAMPLE:

[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
Assuming 1234 is PID and you want to know its associated PPID, PGID, SID & CMD
Tested on CentOS/RedHat 6.x & 7.x

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.