如何根据Python中占用的端口获取套接字FD?

时间:2016-01-25 09:08:17

标签: python linux sockets subprocess

在我的程序中,在子进程中重新启动了一个serve-forever守护进程。

程序本身是一个Web服务,默认使用端口5000。

我不知道该守护进程的启动脚本的详细信息,但它似乎继承了侦听端口5000的套接字。

因此,如果我要重新启动程序,我会发现该端口已被守护进程占用。

现在我正在考虑微调子进程函数以关闭继承的套接字FD,但我不知道如何首先获得FD。

2 个答案:

答案 0 :(得分:1)

这似乎是一个许可问题。子进程可能以其他用户身份运行,因此您无权访问该进程。使用sudo ps xauw |grep [processname]来确定守护进程正在运行的用户。

答案 1 :(得分:1)

float *coords; coords = (float*)malloc(3*500*sizeof(float)); //I know the amount of memory to be allocated 参数(close_fds)在Unix上设置为subprocess.Popen是安全的(在Python 3上是默认值)。虽然您不需要它:proper daemon应该在分叉之前关闭所有打开的文件描述符。

无关:如果您希望您的程序能够to restart during the TIME_WAIT period; set SO_REUSEADDR socket option.