我在 apache2 httpd 2.2.12 上运行 mod_wsgi 和 Django。我执行了相当多的 os.system() 和 subprocess.Popen() 调用,并且想知道:是否有任何选项/指令可以配置 apache2,以便 prefork 子进程关闭除用于与主 prefork 进程通信的文件描述符之外的所有文件描述符?
如果我收到启动进程的请求,然后 apache 重新启动,就会发现其中一些由 apache 启动的进程会继承 apache 描述符(即端口 80),从而导致 apache 在重新启动时无法绑定。我正在寻找一种方法来关闭所有未使用的描述符。
也许在子进程中打开端口 80 描述符的功能是为了允许任何人在主进程崩溃时接管?
答案1
这是 mod_wsgi 邮件列表中同一问题的重复。
简单总结一下,直接从 Web 服务器进程执行子进程通常是一种不好的做法。mod_wsgi 邮件列表的讨论中将提供更多详细信息。