我有一个父进程,当它启动时,启动一个线程,该线程创建一个侦听端口X的TCP服务器实例。之后,父进程开始分叉子进程(只做很少的事情并退出)。注意,这些子进程从父进程继承fds,因此最终监听端口X
父程序有一个处理程序来处理端口X上的请求,但子进程没有这样的处理程序(它是操作系统执行(-)-ED C++程序)
我知道子进程可以关闭所有FD,在这种情况下不会出现上述情况。端口X上的传入请求会发生什么情况?如何处理?在
以下是我目前所观察到的。。。 执行父级中的tcp请求处理程序commands.getstatusoutput(..)当它收到请求时。大多数时候,它的行为和预期的一样(或者我预期的方式)——执行上面的命令没有任何错误……但是偶尔我会
File "/home/y/lib/python2.7/commands.py", line 61, in getstatusoutput
sts = pipe.close()
IOError: [Errno 10] No child processes
在操作系统级别,这应该不会有任何问题。这基本上就是预分叉服务器的工作方式:
如果子进程选择不在侦听套接字上调用accept()(您的exec进程不会这样做),那么该进程或仍在接受连接的进程不应该有任何问题。在
我所能看到的唯一复杂情况是,不能关闭套接字以便操作系统实际关闭它,所有引用它的进程都必须对其调用close(),从而使其打开描述符计数降至零。在
在您的情况下,如果该行为干扰了应用程序的其余部分,那么最好在分叉之后,但在调用exec之前关闭子对象中的侦听套接字。在
相关问题 更多 >
编程相关推荐