5

我正在尝试从在 apache2/WSGI Python 中运行的 Django 应用程序中 fork() 和 exec() 一个新的 python 脚本进程。新的 python 进程被守护,因此它与 apache2 没有任何关联,但我知道 HTTP 端口仍然打开。新进程杀死了 apache2,但结果是新的 python 进程现在保持端口 80 和 443 处于打开状态,我不想要这个。

如何从新的 python 进程中关闭端口 80 和 443?有没有办法访问套接字句柄描述符以便关闭它们?

4

1 回答 1

2

如果您使用subprocess模块执行脚本,构造函数的close_fds参数Popen可能会执行您想要的操作:

如果 close_fds 为 true,则在执行子进程之前,将关闭除 0、1 和 2 之外的所有文件描述符。

假设它们不是简单地关闭,前三个文件描述符传统上是stdin,stdoutstderr,因此 Django 应用程序中的侦听套接字将在子进程中关闭的套接字中。

于 2012-10-18T04:43:36.077 回答