본문 바로가기
Python

Python - Zombie Process 처리 timeout

by 올엠 2024. 3. 25.
반응형

Python 프로그램을 하다보면 보통 서브 프로세스를 생성하는 경우가 발새한다.

이때 프로그램의 로직을 잘 작성하였다면, 좀비 프로세스가 생성되지 않는다.

하지만 복잡한 프로그램, 특히 다중 실행이 가능한 멀티 프로세스로 구사하다보면, 종종 문제를 만나게 되는 부분이 종료가 되지 않는 좀비 프로세스들이다.

이를 효과적으로 관리할 수 있는 방안이 무엇일까 고민해보면서 사용할 수 있는 timeout과 필자의 생각에 대해서 정리해본다.

timeout

Python에서 process를 생성하는 subprocess 라이브러리에서 wait 함수를 이용하여 아래와 같이 timeout을 지정할 수 있다.

>>> import subprocess
>>> from subprocess import TimeoutExpired
>>>
>>> proc = subprocess.Popen('notepad')
>>> try:
...     proc.wait(timeout=5)
... except TimeoutExpired:
...     proc.kill()
...     print('kill notepad')
...
kill notepad

timeout은 프로세스가 작업중이라고 하더라도 위 시간이 지나면 강제로 종료한다는 의미를 말한다.

즉 하루 이상 실행될 일이 없는 프로세스라면 3600*24 를 입력하여 하루가 넘어가지 않도록 프로세스를 조정할 수 있다.

이를 통해 프로세스를 관리한다면 지정된 시간을 넘어가는 프로세스는 없기 때문에 무조건 종료가 가능하다고 할 수 있다.

다만 문제점이라면 이렇게 강제 종료를 하다면 프로세스가 중요한 작업을 하고 있었다면 중간에 강제로 종료되기 때문에 큰 문제가 발생할 수 있다. 따라서 이러한 결정은 큰 위험을 감수해야 한다.

활용한다면 큰 시간으로 설정하고 이와 관련하여 문제가 발생하였는지를 알람을 통해 개발된 기능에 문제가 있는 것을 확인하는 용도로 개발 단계에서 활용할 수 있을 것이다.

notepad kill

반응형