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.
3 Answers
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
-
4What does "comm" and "head" do?JohnMerlino– JohnMerlino2013-07-12 14:49:22 +00:00Commented Jul 12, 2013 at 14:49
-
6@JohnMerlino "comm" prints the command name and
headis a different command, nothing to do withps, 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 inman ps.2013-07-12 15:09:21 +00:00Commented Jul 12, 2013 at 15:09 -
2
commdoes not print the full command. E.g, if you runpython foo.py, comm will only show you thepythonpart, but notpython foo.py32r34wgf3e– 32r34wgf3e2018-01-29 22:19:37 +00:00Commented Jan 29, 2018 at 22:19 -
5Yes, that's why I said it prints the command's name. The command is
python, thefoo.pyis the command's argument. Trycmdif you want the arguments too.2018-01-29 22:26:10 +00:00Commented Jan 29, 2018 at 22:26
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 and 8.x
Try with below command and worked fine
ps -eo pid,ppid,pgid,sgid| head
PID PPID PGID SGID
1 0 1 0
2 0 0 0
4 2 0 0
6 2 0 0
7 2 0 0
8 2 0 0
9 2 0 0
10 2 0 0
11 2 0 0
-
Looking at the existing accepted answer of
ps xao pid,ppid,pgid,sid, how is your answer better? It seems you replacedsid(session id) withsgid, which is the saved group ID. The Question asks for: Process ID (PID), Parent Process ID (PPID), Process Group ID (PGID), and the Session ID (SID) of a process, so yours is missing the Session ID. You've also been told before that your prompt is not an important part of the Answer.2021-05-13 11:57:57 +00:00Commented May 13, 2021 at 11:57 -
Yes I will take care of this next timePraveen Kumar BS– Praveen Kumar BS2021-05-13 15:38:00 +00:00Commented May 13, 2021 at 15:38
ps -o <field>,<field>,.... The man page has the details.-ocontrols the output format, but you might still want-A,-e,-p, etc to select which processes to show.)