我有一个用 C 编写的守护程序应用程序,目前在 Solaris 10 机器上运行,没有已知问题。我正在将其移植到 Linux 上。我不得不做出最小的改变。在测试期间,它通过了所有测试用例。它的功能没有问题。但是,当我在 Solaris 机器上“空闲”时查看它的 CPU 使用率时,它使用了大约 0.03% 的 CPU。在运行 Red Hat Enterprise Linux 4.8 的虚拟机上,相同的进程使用所有可用的 CPU(通常在 90%+ 范围内)。
我的第一个想法是事件循环一定有问题。事件循环是一个无限循环 ( while(1)
),调用select()
. timeval 设置为timeval.tv_sec = 0
和timeval.tv_usec = 1000
。对于该过程正在执行的操作,这似乎足够合理。作为一项测试,我将其timeval.tv_sec
设置为 1。即使在这样做之后,我也看到了同样的问题。
关于 select 在 Linux 和 Unix 上的工作方式,我有什么遗漏吗?或者它与虚拟机上运行的操作系统有什么不同?或者也许还有其他我完全想念的东西?
还有一件事我不确定正在使用哪个版本的 vmware 服务器。虽然它是大约一个月前才更新的。