可以在没有终端的 Unix 进程上写入标准输出
Ok to write to stdout on Unix process without terminal?
我想确保以下内容不会影响我的进程:
Solaris 程序大量写入 stdout(通过 C++ wcout 流)。输出用于跟踪,因此在测试和分析期间,程序员/测试人员可以轻松观察发生的情况。但是该程序实际上是一个服务器进程,因此在生产版本中,它将作为没有附加控制台的恶魔运行,并将所有跟踪输出写入文件。
我假设标准输出被重定向到没有控制台的程序的 nul,在这种情况下,我想一切都很好。但是,我想确保 stdout 输出没有缓冲在某个地方,以便在足够的运行时后我们可能会遇到内存或磁盘空间问题。
注意:我们无法将跟踪输出重定向到文件,因为这会变得太大。相反,我们自己的文件跟踪机制确保创建新文件并删除旧文件,以始终保持一定数量的跟踪,而不是更多。
我想这取决于守护进程的启动方式。创建守护进程时,必须以某种方式处理流(例如,它们需要与当前进程分离,至少当手动启动它的 shell 退出时,必须终止守护进程)。
这取决于守护程序的启动方式。 如果它是作为 cron 作业开始的,输出将被捕获并邮寄给拥有 crontab 的人条目,除非您在命令行中重定向输出。 (但是作为 cron 作业启动的程序并不是真正的守护进程。
更一般地说,所有进程都是从另一个程序启动的(除了初始化过程);大多数时候,该程序是一个外壳(甚至 crontab
调用 shell 来启动其作业),并给出命令作为命令行。 您可以将输出重定向到您喜欢的任何地方在命令行中; 对于像您这样的案例,/dev/null
是一个受欢迎的选择。大多数守护程序都是从rc
文件启动的;已安装的外壳脚本在/etc/rcn.d
. 只需将您的输出重定向到那里即可。
或者更好的是,重写代码以使用某种形式的旋转日志,而不是标准输出。
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用提升过程获取 shell 命令的标准输出
- 将标准输出重定向到ostream
- 从 c++ 中的实例化进程获取输出的可靠方法是什么?
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 在程序执行期间从标准输出重定向到自定义流
- 标准输出C++意外行为
- 防止 qDebug() 写入标准输出
- 捕获远程进程子进程的标准输出
- 无法使用创建进程重定向标准输出
- 我可以重定向两个子进程的标准输出吗?
- 将生成的进程标准输出捕获为 unicode
- 可以在没有终端的 Unix 进程上写入标准输出
- 将一个进程标准输出重定向到管道将产生不同的运行结果
- 在Windows上等待进程或标准输出
- 在 win32、c++ 中的 2 个进程之间共享相同的标准输出
- 提振.进程:捕获的标准输出被缓冲到大小为X
- Python逐行从子进程捕获标准输出
- 进程读数标准输出
- 以编程方式从父进程的子进程捕获打印,因此它们不会转到标准输出