2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Der Daemon-Prozess (Elf) ist ein Hintergrunddienstprozess in Linux. Er ist normalerweise unabhängig vom Steuerterminal und führt regelmäßig bestimmte Aufgaben aus oder wartet auf das Eintreten bestimmter Ereignisse.
chdir()
Funktion: Um zu verhindern, dass das nicht mountbare Dateisystem belegt wird, können Sie es auch auf andere Pfade ändern;#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
void daemonize(void)
{
pid_t pid;
/*
* 成为一个新会话的首进程,失去控制终端
*/
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
} else if (pid != 0) /* parent */
exit(0);
setsid();
/*
* 改变当前工作目录到/目录下.
*/
if (chdir("/") < 0) {
perror("chdir");
exit(1);
}
/* 设置umask为0 */
umask(0);
//重定向0,1,2文件描述符到 /dev/null,因为已经失去控制终端,再操作0,1,2没有意义.
close(0);
open("/dev/null", O_RDWR);
dup2(0, 1);
dup2(0, 2);
}
int main(void) {
daemonize();
while(1);
/* 在此循环中可以实现守护进程的核心工作 */
}
Wenn Sie dieses Programm ausführen, wird es zu einem Daemon-Prozess und ist nicht mehr mit dem aktuellen Terminal verknüpft. Sie können es nicht mit dem Befehl ps sehen. Sie müssen den Befehl ps mit dem Parameter x ausführen, um es anzuzeigen. Darüber hinaus können Sie sehen, dass das Schließen des Terminalfensters oder das Abmelden keinen Einfluss auf die Ausführung des Daemons hat.
Warum muss der Daemon-Prozess vom steuernden Terminal getrennt werden?
Der Grund für die Trennung vom Terminal besteht darin, zu verhindern, dass der Prozess durch von einem Terminal generierte Informationen unterbrochen wird und seine Informationen während der Ausführung auf keinem Terminal angezeigt werden.Da unter Linux die Schnittstelle, über die jedes System mit Benutzern kommuniziert, als Terminal bezeichnet wird, ist jeder Prozess, der von diesem Terminal aus gestartet wird, darauf angewiesen
Dieses an dieses Terminal angeschlossene Terminal wird als Steuerterminal dieser Prozesse bezeichnet. Wenn das Steuerterminal geschlossen wird, werden die entsprechenden Prozesse automatisch geschlossen. Viele unserer Anwendungen möchten den Prozess jedoch nicht beenden, ohne Interrupts auszuschalten, z. B. Datenbanken, Webdienste, Spieledienste usw. Zu diesem Zeitpunkt müssen wir Daemon-Prozesse verwenden.
In diesem Artikel werden das Konzept des Daemon-Prozesses, die Programmierschritte des Daemon-Prozesses, die Code-Implementierung und die Rolle des Daemon-Prozesses vorgestellt. Helfen Sie uns, die Funktionsweise von Hintergrundprogrammen usw. zu verstehen.