【问题标题】:Close TCP port 80 and 443 after forking in Django在 Django 中分叉后关闭 TCP 端口 80 和 443
【发布时间】:2012-10-18 03:38:53
【问题描述】:

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

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

【问题讨论】:

    标签: python django linux apache2


    【解决方案1】:

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

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

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

    【讨论】:

    • subprocess.Popen(myProcArgs,close_fds=True,...) 完美运行。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2019-03-06
    • 2013-12-08
    • 2022-01-11
    相关资源
    最近更新 更多