编辑:
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来执行此操作).这应该解决你的迟到的终端问题.
原文地址:https://www.jb51.cc/c/112599.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。