0

我想确保以下内容不会影响我的流程:

Solaris 程序大量写入标准输出(通过 C++ wcout 流)。输出用于跟踪,因此在测试和分析期间,程序员/测试人员可以轻松观察发生的情况。但是该程序实际上是一个服务器进程,因此在生产版本中它将作为一个没有附加控制台的恶魔运行,并将所有跟踪输出写入文件。

我假设对于没有控制台的程序,stdout 被重定向到 nul,在这种情况下,我想一切都很好。但是,我想确保 stdout 输出没有在某处缓冲,这样在足够的运行时间之后,我们可能会遇到内存或磁盘空间问题。

注意:我们不能将跟踪输出重定向到文件,因为这会变得太大。相反,我们自己的文件跟踪机制确保创建新文件并删除旧文件,以始终保持一定数量的跟踪,而不是更多。

4

2 回答 2

2

我猜这取决于守护进程是如何启动的。创建守护进程时,必须以某种方式处理流(例如,它们需要与当前进程分离,至少当手动退出守护进程的 shell 时必须终止守护进程)。

于 2012-10-11T09:25:16.060 回答
0

这取决于守护进程是如何启动的。如果它作为 cron 作业启动,则输出将被捕获并邮寄给拥有 crontab 条目的任何人,除非您在命令行中重定向输出。(但作为 cron 作业启动的程序并不是真正的守护进程。)

更一般地说,所有进程都是从另一个程序启动的(除了 init 进程);大多数时候,该程序是一个 shell(甚至 crontab调用一个 shell 来启动它的工作),并且命令作为命令行给出。您可以在命令行中将输出重定向到您喜欢的任何位置;/dev/null是像您这样的案例的热门选择。大多数守护进程都是从rc文件启动的;安装在. 只需将您的输出重定向到那里。/etc/rcn.d

或者更好的是,重写您的代码以使用某种形式的旋转日志,而不是标准输出。

于 2012-10-11T12:25:18.297 回答