Daemon-child 不释放 tty

Daemon-child does not release tty

以下脚本不return tty

父进程sys.exit(0)还不够吗?
我是否必须将子进程内的 stdin/stdout 重定向到 return tty?如果是这样,我该怎么做?

[部分代码]

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

Isn't sys.exit(0) enough from parent process?

不,因为 child 进程继承了文件描述符,这意味着它仍然连接到那些 stdinstdout

Do I have to redirect stdin/stdout inside a child process to return tty? If so, how do i do that?

是的,你应该这样做。实际上,您应该做更多的事情 - 比如使用双叉 - 但其他人已经 implemented,所以你可以改用它。

快速而肮脏,您可以在 child 中执行以下操作:

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