2014-07-09 3 views
1

메인 프로세스가 끝나거나 죽은 후에도 계속 실행되는 프로세스/스레드를 실행하고 싶습니다. 이 문제를 어떻게 해결해야합니까?파이썬 : 메인 프로세스가 끝난 후에도 계속 진행되는 프로세스/스레드를 실행하십시오.

편집 : 차이가 나는 경우 하위 프로세스의 요점은 외부 프로세스의 상태를 모니터링하는 것입니다. 이 프로세스가 완료되면 하위 프로세스는 다른 프로세스를 동일한 외부 시스템으로 시작해야합니다. 주 프로그램이 완료된 후에도 필요하므로 새 작업이 필요에 따라 시스템으로 전송되는 동안 사용자가 다른 곳에서 계속 작업 할 수 있도록해야합니다. 당신은 단순히 현재의 프로세스에서 자식 프로세스의 실행 및 종료를 계속하려면

+2

하위 프로세스를 [** fork **] (https://docs.python.org/3/library/os.html#os.fork)로 설정합니다. 쓰레드가 아닌 프로세스에서만이 작업을 수행 할 수 있습니다. 모든 쓰레드는 같은 프로세스 내에 있습니다. –

+0

분기 된 하위 프로세스가 stdout으로 인쇄 할 수 있습니까? – Lackie371

+1

'subprocess.Popen'도 작동합니다. 하위 프로세스는 상위 터미널을 공유합니다. – khachik

답변

3

, 당신은 단순히 os.fork 사용할 수 있습니다

기본적으로 프로세스를 복제합니다 os.fork()를 호출
import os 
import time 


print('Before forking.') 

if not os.fork(): 
    for i in range(5): 
     print("Forkety fork, I'm forked!") 
     time.sleep(1) 

하지만, 부모 프로세스, os.fork()은 자식 프로세스의 PID를 반환하고 자식 프로세스의 경우 0을 반환합니다.

if not os.fork()os.fork()을 호출 한 결과가 0이 아니므로 (즉, 하위 프로세스의 PID) if 분기를 부모 프로세스에 입력하지 않습니다.

자식 프로세스에서 os.fork()이 0을 반환하므로 자식 프로세스는 if 분기를 입력합니다.


당신이 어떤 실행 파일 (반드시 파이썬 코드)를 실행하려면

, 당신의 최선의 선택 @khachik에서 언급 한 바와 같이, subprocess.Popen입니다.

관련 문제