编写守护程序进程调试日志

时间:2011-02-22 16:00:32

标签: c linux process daemon

所以我在一些操作系统/流程编程中开始这样,我是一个新手,但我已经大部分想通了,(我的大学操作系统书没用,所以我不得不浏览万维网......是的我只是称之为)

无论如何这是我的守护进程的骨架......它主要不是我的,基本上是从书本示例代码环顾四周拾取的碎片(是不是?)

无论如何,我对会话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的

1 个答案:

答案 0 :(得分:1)

最后一个问题:除了在后台运行且没有用户控制之外,没有严格定义将进程限定为守护进程的内容。但是守护进程通常有一些特征,其中一些是您已经掌握的。 This是一个简单的英语起点。

流程组和会话本身就是一个主题。 This是一个不错的跳跃点。

我不知道您对日志文件问题的确切了解。由于守护进程与终端stdin / out / err解除关联,因此被重定向或关闭。这留下了输出输出的问题,在这种情况下是错误消息。通常使用Syslog(或类似的)设施,但没有什么能阻止您使用您选择的任何旧文件。你可能想要在事件循环之外打开它们,但是那里没有任何神奇的东西 - 你只需写信给它们。

工作目录已更改,因为您永远不知道程序启动时初始目录是什么。它可能是一个网络驱动器(或其他),可以在你的(长时间运行的)守护进程仍在进行时卸载。您可以将目录更改为您想要的任何目录,但通常使用root,因为如果根目录消失得很好......

如果你发现自己认真对待这些东西,那就找一本好的Stevens书,可能从APUE开始。它们价格昂贵,但却是一生中最好的投资之一。