나는 인터넷을 검색하여 그것을 구현하는 다른 방법을 배웠다. 이제 문제를 발견했다. 내 실행 시간은 항상 그 이상이된다 시간이 나가면 stdout = subprocess.PIPE subprocess.Popen. 내가 그것을 제거하고 경우 다음 당신은 단 5 초에 시간을 가지고위한 새로운 스레드를 생성 한 후 바쁜 대기를위한 휴식의 조건으로 isAlive
상태의 사용해서는 안 정상 실행 시간타임 아웃 후 파이썬에서 서브 프로세스를 죽이는
import subprocess, datetime, os, time, signal
//setting time for timeout
timeout=3
start = datetime.datetime.now()
process = subprocess.Popen(["python", "/home/bourne/untitled.py"],shell=False, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while process.poll() is None:
time.sleep(0.1)
now = datetime.datetime.now()
if (now - start).seconds > timeout:
os.kill(process.pid, signal.SIGKILL)
os.waitpid(-1, os.WNOHANG)
print "error"
print (now - start).seconds
break
print (now - start).seconds
. 답장을 보내 주셔서 감사합니다. 지금 stdout = subprocess.PIPE에 문제가 있습니다. 만약 내가 그것을 쓰면 다른 실행 시간을 정상적인 실행 시간이 걸리고있다. – Jack
@KevalVora - 프로세스가 완료된 후에 만 파이프를 읽는 것 같습니다. 파이프의 버퍼가 가득 차면 하위 프로세스를 읽거나 죽일 때까지 하위 프로세스가 중단됩니다. 그리고'datetime' 대신에'time.time'을 사용하는 것이 더 빠를 것입니다. – mata
사용자가 제출 한 프로그램을 실행하고 성공적으로 실행되었는지 여부를 확인해야합니다. 무한 루프가있는 경우 해당 프로세스를 종료해야하며 사용자에게 결과를 표시해야합니다. 당신은 이것에 대한 어떤 해결책을 제안 할 수 있습니까? – Jack