6
votes

Following the advice from How to terminate a python subprocess launched with shell=True

I have a process that I start with the following

process = subprocess.Popen(my_cmd, shell=True, executable='/bin/bash', preexec_fn=os.setsid)

my_cmd is in the form of some_cmd_that_periodically_outputs_to_stdout | grep "some_fancy_regex" > some_output_file.txt

I kill the process with the following

os.killpg(os.getpgid(process.pid), signal.SIGKILL)

After killing, I get the following warning

ResourceWarning: subprocess XXX is still running

Why am I getting this warning?

1
remove this damn shell=True that you probably don't need and it'll work... or follow the dupe link. - Jean-François Fabre
But that is exactly how I got this warning, by following the dupe link - Rufus
oh, right. Lemme check. Have you tried this solution: stackoverflow.com/a/25134985/6451573 probably better (I've tested it myself) - Jean-François Fabre
I still get the same warning. I don't think this is a duplicate, since my question is asking why I'm getting this warning and what's happening underneath. (though knowing how to solve it would be a bonus) - Rufus
have you tried to remove shell=True ? I think it's useless. That would make things easier without a shell process in between - Jean-François Fabre

1 Answers

8
votes

You didn't wait for the process to end. Even if you kill the process, you're still supposed to wait for it so you don't have a zombie process hanging around. Python is warning you that you didn't wait.

Add a process.wait() call after killing it.