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从用户那里获得这些.确定我们是否第一次运行的逻辑是基于配置文件的存在. 解决方法
让用户自己写配置文件,而不是阅读stdin;检查它是否存在之前分叉,如果没有错误则退出.包含守护进程的示例配置文件,并在守护进程的联机帮助页中记录其格式.你有一个联机帮助页吗?你的配置文件是文本的,是的 此外,您的守护程序逻辑缺少关键步骤.在分配之后,但在调用setsid之前,需要关闭fds 0,1和2并重新打开/ dev / null(不要尝试使用fclose和fopen来执行此操作).这应该解决你的迟到的终端问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |