Python 으로 프로세스를 생성하고 종료하는 중, 좀비가 남는 이슈가 발생해, 그것을 해결한 내용
https://stackoverflow.com/questions/2760652/how-to-kill-or-avoid-zombie-processes-with-subprocess-module
subprocess
로 생성하고 psutil
의 Process.kill()
을 이용해 프로세스 종료한 예시
import psutil
import subprocess
def run():
subprocess.Popen(["python", "test.py"])
def kill_process(process_name):
for proc in psutil.process_iter():
if process_name in proc.cmdline():
proc.kill()
run()
kill_process('test.py')
이 경우 ps
로 확인해보면 좀비가 남아있게 된다. (Z+)
좀비 프로세스는 실행결과를 부모 프로세스가 받지 않아서, 죽은 프로세스가 return 을 받을때까지 결과가 남아있는 것이다
따라서 부모 프로세스가 그 결과를 받아주면 소멸한다.
import subprocess
import time
running_status = {
"my_program": None
}
def run():
running_status['my_program'] = subprocess.Popen(["python", "test.py"])
def kill_popen(process_name):
# 좀비 프로세스를 제거하기 위해, popen 객체를 통해 return 값을 받습니다.
s = running_status[process_name]
s.terminate()
time.sleep(0.5)
s.poll()
run()
kill_popen('my_program')