Antworten:
Ich habe einmal den Vixie-Cron-Quellcode gelesen und musste ins Krankenhaus. Wenn Sie jedoch zu einem späteren Zeitpunkt nach "einer Funktion, die einen Interrupt generiert" suchen, sollten Sie den alarm(2)
Systemaufruf untersuchen. Der Kernel wird aufgefordert, Ihnen das Signal SIGALRM
zu einem festgelegten Zeitpunkt zu senden , das Sie dann abfangen können. In der Zwischenzeit kann Ihr Prozess etwas anderes tun, oder sleep()
wie ich es im Krankenhaus getan habe.
Ich bin mir sicher, dass es viele Variationen gibt. Die Funktionsweise von dcron (auch bekannt als Dillons Cron-Daemon) besteht darin, dass es jeweils bis zu 60 Sekunden lang schläft. Es versucht, dies zu synchronisieren, indem es bei Bedarf weniger schläft, um aufzuwachen 00 Sekunden jeder Minute.
Es verwendet, sleep()
wodurch der Prozess in den Ruhezustand versetzt wird (sofern kein Signal auftritt), ohne die CPU zu verwenden. Wenn es aufwacht, sucht es nach einer Datei cron.update
(erstellt durch crontab
Bearbeiten). Bei Bedarf wird die Ausführungswarteschlange neu erstellt, die erwarteten Aufgaben ausgeführt und der Ruhezustand erneut ausgeführt.
Mindestens ein Cron-Daemon ( fcrond
) verwendet anstelle eines Sleep / Check-Ansatzes ein Signal, das durch Crontab-Bearbeitung an den Cron-Daemon gesendet wird.
Ich habe noch nie einen Crond gesehen, der Dinge häufiger als einmal pro Minute ausführt, daher sind die Ressourcen normalerweise recht sparsam.
Wenn Sie sich unter Linux /proc
Dinge wie gelesene / geschriebene Bytes oder iowait ansehen, stellen crond
Sie möglicherweise fest, dass die Nutzung relativ hoch ist. Dies liegt daran, dass letztendlich alle untergeordneten Prozesse berücksichtigt werden, die gestartet werden, z. B. unter CentOS 5.x:
# grep "^[rw]" /proc/`pgrep crond`/io
rchar: 153463658151
wchar: 91095820045
read_bytes: 44480745472
write_bytes: 2261389312
(Dank geplanter Paketaktualisierungen und ASLR / Pre-Link-Aufgaben in diesem Fall)
Siehe auch /programming/3982957/how-does-cron-internally-schedule-jobs .
fcrond
, hat nur die Quelle überprüft: Es ruft einen Helfer auf, um das HUP crond
.