Ich versuche, das ppid des gewünschten Prozesses abzurufen.

Ich habe folgenden Code verwendet, um die PID zu erhalten

proc=subprocess.Popen('ps -ae | grep ruby', shell=True, stdout=subprocess.PIPE, )
output=proc.communicate()[0]
str = output.split()

Jetzt in str[0] habe ich die PID des Prozesses sagen Ruby, ich möchte die übergeordnete Prozess-ID ppid und die untergeordnete Prozess-ID des gleichen Prozesses erhalten.

Ich brauche diese Lösung, um auf Solaris as well as Red Hat Enterprise Linux 6.0 ausgeführt zu werden

Gibt es eine Möglichkeit, dies wie getppid() und getchildid() zu erreichen? Oder muss ich es erneut mit dem Befehl grep tun und aufteilen?

5
User007 29 Nov. 2013 im 21:58

3 Antworten

Beste Antwort

Die Verwendung dieses Codes ist eine schlechte Idee. Ihr Code funktioniert unter Solaris nicht. Sie können die 'psutil'-Bibliothek verwenden, um Ihren Code unabhängig vom Betriebssystem zu halten. https://github.com/giampaolo/psutil

p = psutil.Process(7055)
parent_pid = p.ppid()
4
Giampaolo Rodolà 2 Feb. 2017 im 14:39

Die Antwort hängt vom Befehl ps Ihres Systems ab. Unter Linux enthält ps die PPID für jeden Prozess mit dem Flag -l (unter anderem), sodass ps -ale | grep ruby die ID des Ruby-Prozesses in str[3] und die PPID von Ruby in enthält str[4].

0
Tim Pierce 29 Nov. 2013 im 18:09

Ich nehme an, an os.getppid () ist nichts auszusetzen.

Zucken.

http://docs.python.org/3/library/os.html#process-parameters

1
dstromberg 30 Nov. 2013 im 03:01