0
我正在開發一個簡單的服務,綁定到一個端口,併產生一個PTY爲應用程序,dup()
荷蘭國際集團STDIN
,STDOUT
和STDERR
到插座,使插座接管pty
控制:如何強制pty.spawn()啓動的應用程序完全退出?
prevOutFd = os.dup(1)
prevInFd = os.dup(0)
prevErrFd = os.dup(2)
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
logging.info('Connected with ' + addr[0] + ':' + str(addr[1]))
# redirect stdout, stdin and stderr to socket fd
os.dup2(conn.fileno(),0)
os.dup2(conn.fileno(),1)
os.dup2(conn.fileno(),2)
p=pty.spawn("/usr/sbin/pppd")
# redirect stdout, stdin and stderr back to original fds
os.dup2(prevOutFd, 0)
os.dup2(prevInFd, 1)
os.dup2(prevErrFd, 2)
logging.info("Closing connection....")
conn.close()
這工作得很好,除了當客戶突然殺死連接。 服務器處理它只是罰款,而是催生了應用程序在系統中留下解散:
root 9820 0.1 0.0 0 0 ? Zs 16:19 0:00 [pppd] <defunct>
我認爲,解決辦法是要麼等待應用程序完成或乾淨關閉它。 但是,pty
似乎沒有某種close()
方法。
任何人都知道如何幹淨地關閉pty.spawn()
ed應用程序?
非常感謝! – user3158527