gpt4 book ai didi

c - 编写守护进程调试日志

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:11 27 4
gpt4 key购买 nike

所以我开始从事一些操作系统/进程编程等等,我是一个新手,但我基本上已经弄明白了,(我的大学操作系统书没用,所以我不得不浏览万维网....是的我只是这样调用它)

无论如何,这是我的一个守护进程的框架......它大部分不是我的,基本上是从书籍示例代码中查找的点点滴滴(对吗?)

无论如何,我有几个关于 session ID 的问题(它到底是什么?它与进程 ID 有何不同)

2 是我将如何记录调试文件?在下面的部分?因为它不在守护进程循环中?我们会返回诸如“守护进程启动:上午 11:59”之类的内容吗?

3、究竟为什么我们要改变目录?以及为什么您希望它成为 root 用户……显然我不是 x-pert linux 程序员,但仍然……

我想我不明白这是如何让它成为守护进程的?我了解 fork 和父/子......但是是什么让它成为守护进程?

#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 的

最佳答案

首先是最后一个问题:除了在后台运行且不受用户控制外,没有严格的定义来定义进程是否符合守护进程的条件。但是守护进程通常有很多特征,您已经了解了其中的一些特征。 This是一个简单的英语起点。

流程组和 session 本身就是一个主题。 This是一个足够好的起点。

我不确切知道您对日志文件问题的看法。由于守护进程与终端 stdin/out/err 断开关联,因此被重定向或关闭。这就留下了将输出发送到哪里的问题,在本例中是错误消息。通常使用 Syslog(或类似)工具,但没有什么可以阻止您使用您选择的任何旧文件。您可能希望在事件循环之外打开它们,但那里并没​​有发生任何神奇的事情 - 您只需写信给它们即可。

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

如果您发现自己对这些东西越来越认真,那么就好好考虑一下 Stevens书,可能以 APUE 开头.它们价格昂贵,但却是一生中最好的投资之一。

关于c - 编写守护进程调试日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5080548/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com