/********************************************************************************* * Copyright: (C) 2025 LingYun IoT System Studio * All rights reserved. * * Filename: daemon.c * Description: This file daemon() implement example program * * Version: 1.0.0(10/28/2025) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "10/28/2025 10:18:29 AM" * ********************************************************************************/ #include #include #include #include #include #include void my_daemon(void) { pid_t pid; /* 第一次 fork,让父进程退出 */ pid = fork(); if (pid < 0) exit(1); else if (pid > 0) exit(0); /* 父进程退出 */ /* 创建新会话,脱离控制终端 */ if (setsid() < 0) exit(1); /* 第二次 fork,防止重新获得终端 */ pid = fork(); if (pid < 0) exit(1); else if (pid > 0) exit(0); /* 修改工作目录为根目录 */ chdir("/"); /* 重设文件掩码 */ umask(0); /* 关闭标准文件描述符 */ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); } int main(void) { my_daemon(); /* 守护进程主循环 */ while (1) { int fd = open("/tmp/daemon.log", O_WRONLY | O_CREAT | O_APPEND, 0644); if (fd >= 0) { dprintf(fd, "Daemon alive, PID=%d\n", getpid()); close(fd); } sleep(5); } return 0; }