在我的程序中,在子进程中重新启动了一个serve-forever守护进程。
程序本身是一个Web服务,默认使用端口5000。
我不知道该守护进程的启动脚本的详细信息,但它似乎继承了侦听端口5000的套接字。
因此,如果我要重新启动程序,我会发现该端口已被守护进程占用。
现在我正在考虑微调子进程函数以关闭继承的套接字FD,但我不知道如何首先获得FD。
答案 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.