Question

Why is it that the subprocess pid (Popen.pid) has different value from that the ps command returns?

I've noticed this when ps called both from inside python (with subprocess.call()) and from another terminal.

Here's a simple python file to test:

#!/usr/bin/python3
'''
Test subprocess termination
'''

import subprocess

command = 'cat'

#keep pipes so that cat doesn't complain
proc = subprocess.Popen(command,
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    stdin=subprocess.PIPE,
                    shell=True)

print('pid = %d' % proc.pid)
subprocess.call("ps -A | grep -w %s" % command,
                    shell=True)

proc.terminate()
proc.wait()             # make sure its dead before exiting pytyhon

Usually the pid reported by ps is 1 or 2 more than that reported by Popen.pid.

Was it helpful?

Solution

Because the command is run with shell=True, the pid returned by subprocess is that of the shell process used to run the command.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top