subprocess.run을 timeout 옵션을 주어 돌렸는데도 끝나지 않는다면
The timeout argument is passed toPopen.communicate()
. If the timeout expires, the child process will be killed and waited for. TheTimeoutExpired
exception will be re-raised after the child process has terminated.
요거 때문에 그렇다. child process들이 끝날때까지 다 기다리느라구 안끝나는거임.. 그럴때는 그냥
popen으로 proc 생성하고 communicate에 timeout 줘서 돌린담에 TimeoutExpired 에러 났을때 proc.kill() 하면댐
예를 들어
def run_command(command, timeout=100):
try:
proc = subprocess.Popen(shlex.split(command), stdout=PIPE, stderr=PIPE)
return proc.communicate(timeout=timeout)
except subprocess.TimeoutExpired:
proc.kill()
return None
요런식으루.. 구냥 지금 쓴 코드고 안돌려봐서 오타가 있을지두 모르지만
무튼 이러면 프로세스 아가들도 확실히 죽여줄수가 잇당
갠적으루 run 옵션에 kill_childs 옵션이 있음 좋겟당