我正在尝试获取我想要的进程的ppid
。
我使用以下代码获取pid
proc=subprocess.Popen('ps -ae | grep ruby', shell=True, stdout=subprocess.PIPE, )
output=proc.communicate()[0]
str = output.split()
现在在str[0]
中,我有进程的pid说ruby,我想得到父进程ID ppid
和同一进程的子进程ID。
我需要在Solaris as well as Red Hat Enterprise Linux
6.0
有没有办法像getppid()
和getchildid()
那样获得这个?或者我需要再次通过grep
命令并拆分?
答案 0 :(得分:4)
使用此代码是一个坏主意。您的代码不适用于solaris。 您可以使用'psutil'库,这样您就可以保持代码独立于操作系统。 https://github.com/giampaolo/psutil
p = psutil.Process(7055)
parent_pid = p.ppid()
答案 1 :(得分:1)
答案 2 :(得分:0)
答案取决于系统的ps
命令。在Linux上,ps
将包含带有-l
标志(以及其他)的每个进程的PPID,因此ps -ale | grep ruby
将包含str[3]
中的ruby进程ID和ruby的PPID in str[4]
。