私はLinux用のPythonプログラムを書いていますが、プログラムは基本的に端末を使用して初期化に関するフィードバックをユーザーに提供し、端末の制御を放棄してバックグラウンドで実行を継続する必要があります。どうすればこれを達成できますか?
ありがとうございました
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 を返し、親プロセスでは子プロセス ID を返します。各プロセスはローカル変数の独自のコピーを取得することに注意してください。
お役に立てれば
プログラムをpython-daemonでラップするだけです。
ここでは、フォークはおそらく正しいことであり、より良いデーモン化ですが、スクリプトを変更せずにほぼ同じ効果を得る簡単な方法は、(質問に対するコメントが示唆するように) スクリプトを単にバックグラウンドに置くことです。
ただし、端末への接続を完全に放棄すること&
はできません。そのためには、次を使用しますnohup
。
(nohup python foo.py >foo-output &)
スクリプトをデーモン化する簡単な方法です。これnohup
は、制御端末が移動したときにプロセスが強制終了されないことを意味し、スクリプトをサブシェルのバックグラウンドに入れて(...)
終了すると、init プロセスの子として終了することを意味します。事実上、これが「デーモン化」の意味のほとんどです。
これは、元の質問が実際に要求するよりも一般的な手法ですが、それでも有用です。