2016-06-29 5 views
0

次のスクリプトはttyを返しませんデーモン - 子供はttyを解放しません

親プロセスから十分ですか?
ttyを返すために子プロセスの中でstdin/stdoutをリダイレクトする必要がありますか?もしそうなら、どうしたらいいですか?

[部分的なコード]

pid = os.fork() 
if pid > 0: 
    # parent 
    sys.exit(0) 

#child 
PID = os.getpid() 
PID_DIR = '/var/pid/' 
PID_FILE = '%s,%s.pid' % (machine_name, PID) 

with PidFile(pidname=PID_FILE, piddir=PID_DIR): 
    worker_handler = gevent.spawn(worker) 
    master_handler = gevent.spawn(master) 
    handlers = [worker_handler, master_handler] 

    try: 
     while True: 
      time.sleep(1) 
    except Exception, msg: 
     print msg 
     gevent.killall(handlers) 

    handlers.joinall() 

答えて

1

は、親プロセスから十分sys.exit(0)ありませんか?子プロセスは意味、ファイル記述子を継承しているので、

はありません、それはまだstdinstdoutそれらに接続されています。

ttyを返すために子プロセス内でstdin/stdoutをリダイレクトする必要がありますか?もしそうなら、どうしたらいいですか?

はい、そのようなことを行う必要があります。実際には、二重フォークを使用するなど、もっと多くの作業を行う必要がありますが、すでに他の人がimplementedだったので、代わりに使用することができます。

クイックや汚れは、あなたが子供に次の操作を行うことができます。

os.close(0) # close C's stdin stream 
os.close(1) # close C's stdout stream 
os.close(2) # close C's stderr stream 
+0

はい働くあなたに感謝 – ealeon

関連する問題