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



------------------------------------------------------------------------------------------------


0down vote




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).