#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
int init_daemon(void) {
pid_t pid;
int i;
FILE *fp;
time_t mytime;
pid = fork();
if (pid == -1) {
return -1;
} else if (pid > 0) {
exit(0);
}
else {
setsid();//创建新的会话空间
chdir("/tmp");
umask(0);
for (i = 0; i < getdtablesize(); ++i)
{
close(i);
}
while (1) {
sleep(2);
if ((fp = fopen("test.log", "a")) != NULL)
{
mytime = time(0);
fprintf(fp, "I'm here at %s \n", asctime(localtime(&mytime)));
fclose(fp);
}
}
return 0;
}
}
int main(void) {
init_daemon();
return 0;
}
本文介绍了一个用C语言编写的简单后台守护进程的实现过程。该程序通过fork、setsid等系统调用脱离终端,进入后台运行,并周期性地记录日志到文件中。文章展示了如何创建一个不会干扰系统正常工作的后台服务。
1590

被折叠的 条评论
为什么被折叠?



