2012-04-07 6 views
1

私はLinux用のPythonプログラムを書いています。プログラムは基本的に端末のフィードバックをユーザに提供し、端末の制御権を放棄してバックグラウンドでの実行を続ける必要があります。どうすればこれを達成できますか? プログラムをターミナルの制御を放棄する方法は?

あなたは

+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プロセスの子として終了します。それは実質的に 'デーモン化'が意味することのほとんどです。

これは、元の質問よりも一般的な手法ですが、それでも役に立つと思います。

関連する問題