2016-06-29 5 views
0

Das folgende Skript nicht ttyDaemon-Kind entbindet nicht tty

Ist das nicht sys.exit(0) genug von übergeordnetem Prozess zurückkehrt?
Muss ich Stdin/Stdout in einem Kindprozess umleiten, um tty zurückzugeben? Wenn ja, wie mache ich das?

[Partial code]

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() 

Antwort

1

Ist das nicht sys.exit(0) genug von Eltern-Prozess?

Nein, weil Kindprozess Filedeskriptoren geerbt hat, seine Bedeutung noch zu jenen stdin und stdout verbunden.

Muss ich stdin/stdout in einen Kindprozess umleiten, um tty zurückzugeben? Wenn ja, wie mache ich das?

Ja, Sie sollten so etwas tun. Eigentlich solltest du noch ein paar Sachen machen - wie zum Beispiel mit der doppelten Gabel - aber es war schon implemented von anderen Leuten, also kannst du das stattdessen benutzen.

Schnell und schmutzig, können Sie in das Kind folgendes tun:

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

ja, dass Sie arbeitet danken – ealeon

Verwandte Themen