- 论坛徽章:
- 0
|
原帖由 kenby 于 2009-3-31 14:45 发表 ![]()
1.没有关闭从父进程继承而来的文件描述符
2.没有为守护进程提供错误记录
3.没有把STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO打开到/dev/null
说他狗尾续貂绝非冤枉!
1 为什么要关闭从父进程继承而来的所有文件描述符?如果在daemonize之前调用了openlog()的话难道要再openlog()一次?折腾不折腾啊?没用的描述符你关闭,有用的难道你也关闭???(想起来一件事:曾经去一家相当不小的公司(不点名了)洽谈培训事宜,来了个号称技术总监的货,他问我写daemon的时侯出现broken pipe是因为什么,我很蒙,我哪知道为什么!他得意洋洋地解释说“你做daemon的时侯肯定要关闭所有文件描述符吧...”,一句话我就懂了,这丫的肯定照抄apue2扫射关闭文件描述符来的,不好意思打击他,也没义务纠正他...)
2 和 3 这两件事情是成为daemon的必要操作吗?不是!
apache就没有使用syslog啊!谁说STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO一定要重定向到null了?别处不行吗??
还有:为什么要忽略SIGHUP?不知道很多daemon要使用SIGHUP重装载配置文件吗?
...
把这些不必要的操作放在一个公共函数中合理吗?仔细考虑考虑APUE1里面为什么不写这些东西!难道是Stevens不明白吗?
一个程序员能够明白不做什么,与明白做什么一样重要! |
|