代码之家  ›  专栏  ›  技术社区  ›  zer02

烧瓶产卵独立过程(fork)导致端口处于使用状态

  •  0
  • zer02  · 技术社区  · 7 年前

    我想让一个独立的C++程序被烧瓶调用,烧瓶应该继续运行。 它启动C++进程,如果我杀了烧瓶,它就继续运行(好)。 谢谢

    import os
    pid=os.fork()
    if pid==0: # new process
        os.system("nohup /path/myc++ &")
    

    Launch a completely independent process

    sudo python server.py 
     * Serving Flask app "server" (lazy loading)
     * Environment: production
       WARNING: Do not use the development server in a production environment.
       Use a production WSGI server instead.
     * Debug mode: on
    Traceback (most recent call last):
      File "server.py", line 1046, in <module>
        app.run(debug=True, use_reloader=True)
      File "/home/user/.local/lib/python2.7/site-packages/flask/app.py", line 943, in run
        run_simple(host, port, self, **options)
      File "/home/user/.local/lib/python2.7/site-packages/werkzeug/serving.py", line 795, in run_simple
        s.bind(get_sockaddr(hostname, port, address_family))
      File "/usr/lib/python2.7/socket.py", line 228, in meth
        return getattr(self._sock,name)(*args)
    socket.error: [Errno 98] Address already in use
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   tunglt    7 年前

    fork() 呼叫当父进程退出时,这些描述符保持在opened stats中,并且在下一次启动时,Flask将无法在已经打开的端口绑定套接字。

    system() 命令启动。

        import os
        pid=os.fork()
        if pid==0: # new process
                for fd in xrange(0, 1024):
                    try:
                        os.close(fd)
                    except OSError:
                        pass
                os.system("nohup /path/myc++ &")