How to get parent pid from a given children pid?
I know I can mannully check it under /proc, I am wonder if there is a smart/better way to achieve this in Ubuntu. Note the parent may or may not be killed.
Thanks
Using pstree
by command name
Using pstree
you can search by the child process name and get the Process ID (PID) along with the parents, grandparents and any children of the child process:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
In this case sleep
is the child command and it's PID is 8414
. It's parent ID is 841 and is called display-auto-brightness
. The grandparent is a shell (sh
) with a process ID of 839
. The great-grandparent is cron
with a process ID of 795
. The great-great-grandparent is also cron
with a process ID of 763
.
If you want to search by Process ID of sleep
instead of name you can use:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
Notice the sleep
process ID changed to 14653
. The parent (PID 841) sleeps for 1 minute, wakes up for a split second and then starts a new sleep
command which gets a new process ID. This is another reason why searching for sleep
is easier than searching by process ID.
This code was taken from: Automatically adjust display brightness based on sunrise and sunset and adapted to this question.
To see a nested chain all the way back to boot process use the PID instead of name:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
Note: Another minute has passed and the sleep command gets a new PID (8541).