我们正在使用select()
来监控TCP / IP套接字,这在我们的Linux程序中通常可以正常工作。超时是10秒。
但是,我们意识到在分离之后(例如通过nohup
),我们的进程会产生100%的CPU负载。我们将它追踪到select()(在循环中调用)。 nfds
我们的fd_set
似乎很正常。如前所述,超时为10秒。对参数的值进行了双重检查(Tracelog / timer vs. strace
)。
如果由于其父进程终止(这是默认用例)而导致进程被分离,则同一bash中的键盘描边(任意键)会导致进程产生100%的CPU负载(然后是永远保持)。如果我直接在nohup中启动我们的程序,那么负载从开始就是100%。
如果套接字出现任何问题, select()
会产生高CPU负载,而这种情况并非如此。
还有其他人想出过这样的问题吗?