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 进程继承了文件描述符,这意味着它仍然连接到那些 stdin
和 stdout
。
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
以下脚本不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 进程继承了文件描述符,这意味着它仍然连接到那些 stdin
和 stdout
。
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