【发布时间】:2011-02-22 16:00:32
【问题描述】:
所以我开始进行一些操作系统/进程编程等,我是新手,但我基本上已经弄清楚了,(我的大学操作系统书没用,所以我不得不浏览万维网......是的我只是这么称呼它)
无论如何,这是我的守护进程框架......它大部分不是我的,基本上是从书籍示例代码中四处寻找的点点滴滴(对吗?)
无论如何,我对会话 ID 有一些疑问(它到底是什么?它与进程 ID 有什么区别)
和 2 是我将如何记录调试文件?在下面的部分?因为它不在守护程序循环中?我们会返回诸如“守护进程开始:上午 11:59”之类的内容吗?
3,我们究竟为什么要更改目录?以及你为什么希望它是 root ......显然我不是一个 x-pert linux 程序员但仍然......
我想我不明白这如何使它成为一个守护进程?我了解分叉和父母/孩子......但是是什么让它成为守护进程?
#include <unistd.h>
#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
int main(void) {
//Process and Session ID
pid_t pid, sid;
//Fork
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
//Huzzah
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* APPARENTLY I PLACE LOGFILES HERE? HOW? */
//Create new sid (i don't understand this
sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}
//Change Directory, Why?
if ((chdir("/")) < 0) {
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors <---Why? just for protection */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
/* Daemon-specific initialization goes here */
//Daemon Loop
while (1) {
//Do Task
}
exit(EXIT_SUCCESS);
}
编辑:忘了说这是针对 Linux 的
【问题讨论】:
-
只需使用
daemon()libc 调用而不是自己分叉。