Ich habe eine Daemon-App in C geschrieben und läuft derzeit ohne bekannte Probleme auf einem Solaris 10-Rechner. Ich bin gerade dabei, sie auf Linux zu portieren. Ich musste nur minimale Änderungen vornehmen. Beim Testen hat sie alle Testfälle bestanden. Es gibt keine Probleme mit seiner Funktionalität. Wenn ich mir jedoch die CPU-Auslastung im Leerlauf auf meinem Solaris-Rechner ansehe, verbraucht er etwa 0,03 % CPU. Auf der virtuellen Maschine, auf der Red Hat Enterprise Linux 4.8 läuft, verbraucht derselbe Prozess die gesamte verfügbare CPU (normalerweise irgendwo im Bereich von 90 % und mehr).
Mein erster Gedanke war, dass etwas mit der Ereignisschleife nicht stimmen kann. Die Ereignisschleife ist eine Endlosschleife ( while(1)
) mit einem Aufruf an select()
. Der Zeitablauf ist so eingestellt, dass timeval.tv_sec = 0
y timeval.tv_usec = 1000
. Dies scheint angemessen für das, was der Prozess tut. Als Test habe ich die timeval.tv_sec
auf 1. Auch nachdem ich das getan hatte, sah ich das gleiche Problem.
Gibt es etwas, das ich bei der Funktionsweise von select unter Linux im Vergleich zu Unix übersehe? Oder funktioniert es anders mit einem Betriebssystem, das auf einer virtuellen Maschine läuft? Oder gibt es vielleicht etwas anderes, das ich völlig übersehe?
Und noch etwas: Ich bin mir nicht sicher, welche Version von Vmware Server verwendet wird. Er wurde allerdings erst vor etwa einem Monat aktualisiert.