Следуя рекомендациям How to завершить подпроцесс python, запущенный с оболочкой = True
У меня есть процесс, который я начинаю со следующего
process = subprocess.Popen(my_cmd, shell=True, executable='/bin/bash', preexec_fn=os.setsid)
my_cmd находится в виде some_cmd_that_periodically_outputs_to_stdout | grep "some_fancy_regex" > some_output_file.txt
some_cmd_that_periodically_outputs_to_stdout | grep "some_fancy_regex" > some_output_file.txt
Я убиваю процесс следующим образом
os.killpg(os.getpgid(process.pid), signal.SIGKILL)
После убийства я получаю следующее предупреждение
ResourceWarning: subprocess XXX is still running
Почему я получаю это предупреждение?
Вы не wait
завершения процесса. Даже если вы убьете процесс, вы все равно должны wait
его, чтобы у вас не было процесса зомби. Python предупреждает вас, что вы не wait
.
Добавьте вызов process.wait()
после его убийства.
shell=True
что вам, вероятно, не нужно, и она будет работать ... или перейдите по ссылке dupe.