2012-04-07 5 views
1

저는 리눅스 용 파이썬 프로그램을 작성하고 있습니다. 프로그램은 기본적으로 터미널에 대한 피드백을 사용자에게 제공합니다. 사용자에 대한 피드백은 터미널 제어권을 포기하고 백그라운드에서 실행을 계속해야합니다. 이것을 어떻게 할 수 있습니까? 프로그램이 터미널의 제어권을 양도하는 방법은 무엇입니까?

+1

'python script.py '와 같이 스크립트를 실행하거나 다음 질문에 답을 사용하여 프로세스를 디먼 처리 할 수 ​​있습니다. http://stackoverflow.com/questions/473620/how-do-you-create- a-daemon-in-python – Collin

답변

2
당신은 자식 프로세스 생성 os.fork()를 사용할 수

:

import os 
import time 

msg = raw_input("Enter message for child process") 

x = os.fork() 

if not x: 
    for i in range(5): 
     time.sleep(3) 
     print msg 

os.fork() 자식 프로세스에서 0 반환하고, 각각 그 paret 과정 주에서 자식 프로세스의 ID를 프로세스는 로컬 변수의 자체 복사본을 가져옵니다.

희망이

+0

간단하고 우아합니다. 고맙습니다 – Raphael

1

분기 여기에, 아마도 옳은 일이다하는 데 도움이, 그리고 더 나은 daemonising하지만, 질문에 대한 코멘트에서 알 수 있듯이 스크립트를 변경하지 않고, 대부분 같은 효과를 얻을 수있는 간단한 방법 (이다)를 사용하여 스크립트를 백그라운드에두기 만하면됩니다.

그러나 &이 수행하지 않을 내용은 터미널에 대한 연결을 완전히 포기합니다. 이를 위해, nohup를 사용

(nohup python foo.py >foo-output &) 

스크립트를 daemonising하는 간단한 방법입니다. nohup은 제어 터미널이 이동할 때 프로세스가 종료되지 않고 스크립트가 서브 쉘 (...)의 백그라운드로 들어가는 것을 의미합니다.이 쉘은 종료 프로세스가 init 프로세스의 자식으로 끝나는 것을 의미합니다. 그게 대부분 'daemonising'이 의미하는 것입니다.

이것은 원래의 질문보다 더 일반적인 기술이지만, 그럼에도 불구하고 유용합니다.

관련 문제