Resolved before asked: cat /proc/1111/status | grep PPid
10 Answers
Command line:
ps -o ppid= -p 1111
Function:
ppid () { ps -p ${1:-$$} -o ppid=; }
Alias (a function is preferable):
alias ppid='ps -o ppid= -p'
Script:
#!/bin/sh
pid=$1
if [ -z $pid ]
then
read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=
If no PID is supplied to the function or the script, they default to show the PPID of the current process.
To use the alias, a PID must be supplied.
-
1
-
7
-
1prefer alias if you want any shell auto-complete to still work– smac89Commented Dec 7, 2020 at 23:59
-
Auto-completion of function names works just fine for me. Commented Jun 27, 2022 at 21:36
To print parent ids (PPID
) of all the processes, use this command:
ps j
For the single process, just pass the PID, like: ps j 1234
.
To extract only the value, filter output by awk
, like:
ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps
To list PIDs of all parents, use pstree
(install it if you don't have it):
$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)
To get parent PID of the current process, use echo $$
.
-
2
-
ps j
is great because it's available on many distros and is easily composable Commented Jul 22, 2019 at 20:58
This is one of those things I learn, forget, relearn, repeat. But it's useful. The pstree command's ‘s’ flag shows a tree with a leaf at N:
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
-
-
@Alex78191 why do you ask? What about it? It does something completely different to what the question asked.– nyovCommented May 26, 2020 at 13:28
Parent pid is in shell variable PPID, so
echo $PPID
-
3Yes, but 1. I want parent pid of other process, 2. I want to be able to traverse all ancestors to init.– Vi.Commented Sep 24, 2012 at 12:37
-
4On the other hand, using
$PPID
did just solve the problem I had which Google suggested this page as an answer to. Commented Sep 24, 2012 at 15:58
Read /proc/$PID/status. Can be easily scripted:
#!/bin/sh P=$1 if [ -z "$P" ]; then read P fi cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]*"
-
3
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'
is all you need. (It is very uncommon for Unix tools to do theif [ -z ]; then read
thing.) Commented Jun 8, 2010 at 11:12 -
@grawity It helps do do things like
echo $$ | ppid | ppid | ppid
– Vi.Commented Jun 9, 2010 at 13:04 -
3
-
@FelipeAlvarez, My hands are not used to type
< /some/file grep | grep | ...
.– Vi.Commented Nov 25, 2014 at 0:29 -
2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
A little bit more complex example that checks the command of a parent that started current process Change comm= to cmd= to see full command
-
-
It is actually required on some terminals. To be honest I don't remember exactly but it actually solved a problem. :D Commented Oct 13, 2017 at 7:08
Run top
with whatever options you want, like -u username and -p PID
.
And while top
is working press f, it shows a list of options you want to display in top
output, and the displayed parameters will be shown in CAPITAL letters and the parameters which or not displaying will be shown in small letters.
So by entering the letter before the parameter you can enable or disable it. For parent process ID you have to enter b and then press Enter, it'll display the PPID in top output.
-
1It is to be used non-interactively. I already know that in
htop
you can configurePPID
column.– Vi.Commented Nov 23, 2012 at 13:49
Here is a quick solution that should also work:
ps $$
-
That doesn't give the parent PID which is what the OP asked for. Commented Sep 24, 2013 at 19:35
all parent processes of a pid
I came here when I was trying to find "all parent processes of a pid". I ended up making my own recursive function to do it.
pid_lineage.sh
#!/bin/bash -eu
main(){
ps --pid ${1:-$$} --no-headers --format pid,ppid,args | \
(
read pid ppid args
echo -e "$pid\t$args"
[[ $pid -gt 1 ]] && main $ppid
)
}
main "$@"
-
@John-Karahalis I appreciate your edit. It was rejected by 2 other reviewers, but I agree and usually use long options to save readers time having to look up the meaning of cryptic flags. Thanks! Commented Aug 30, 2021 at 21:28
grep PPid status |cut -f2
like intime(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done)
; wonder if there is something even faster?fgrep PPid status |cut -f2
sed -rn '/PPid/ s/^.*:\s+// p' < status
pid=3773234; while true; do pid=$(awk '/^PPid:/{print $NF}' /proc/$pid/status);printf "$pid\n"; if [ $pid -eq 1 ];then break;fi;done|tac