c – Linux守护程序和STDIN / STDOUT

我正在处理一个 linux守护进程,并且与stdin / stdout有一些问题.通常由于一个守护进程的本质,你没有任何stdin或stdout.但是,我的守护程序中有一个函数,当守护程序第一次运行时,调用函数来指定守护程序成功运行所需的不同参数.当这个函数调用时,终端变得如此缓慢,我必须启动一个独立的shell,并用顶部杀死守护进程以获得响应提示.现在我怀疑这与关闭stdin / stdout的分支过程有关,但我不太清楚我该如何解决这个问题.如果你们能够了解一些最受赞赏的情况.谢谢.

编辑:

int main(argc,char *argv[]) {

/* setup signal handling */

/* check command line arguments */

pid_t pid,sid;

pid = fork();

if (pid < 0) {
exit(EXIT_FAILURE);
}

if(pid > 0){
exit(EXIT_SUCCESS);
}

sid = setsid();

if(sid < 0) {
exit(EXIT_FAILURE);
}

umask(027);

/* set syslogging */

/* do some logic to determine wether we are running the daemon for the first time and if we are call the one time function which uses fgets() to recieve some input */

while(1) {

/* do required work */

}

/* do some clean up procedures and exit */

return 0;
}

你们提到使用配置文件.这正是我通过输入来存储参数的方法.但是我最初还是需要通过stdin从用户那里获得这些.确定我们是否第一次运行的逻辑是基于配置文件的存在.

解决方法

You guys mention using a config file. This is is exactly what I do to store the parameters recieved via input. However I still initially need to get these from the user via the stdin. The logic for determining whether we are running for the first time is based off of the existence of the config file.

用户自己写配置文件,而不是阅读stdin;检查它是否存在之前分叉,如果没有错误退出.包含守护进程的示例配置文件,并在守护进程的联机帮助页中记录其格式.你有一个联机帮助页吗?你的配置文件是文本的,是的

此外,您的守护程序逻辑缺少关键步骤.在分配之后,但在调用setsid之前,需要关闭fds 0,1和2并重新打开/ dev / null(不要尝试使用fclose和fopen来执行此操作).这应该解决你的迟到的终端问题.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...