c++: Linux:管道到我的程序从多个线程或流,而不是' cout '
C++: Linux: Pipe to my program from multiple threads or streams other than `cout`
从这个问题开始,我注意到当调用这样的管道时,我的LogRotator
程序没有捕获两种类型的输出:
$ ./MyMainProgram | ./LogRotator
当我的LogRotator
C++
程序不捕获输出信息的情况是:
1-当来自MyMainProgram
时,我使用std::cout
以外的流。例如:std::clog
.
2-当MyMainProgram
使用多线程时。在MyMainProgram
中,我使用boost::thread_group
,并且std::cout
在新线程中的所有内容都不会被LogRotator
捕获。
当这样的调用发生时,这种行为在linux中是正常的:
./MyMainProgram > log.txt
但是这可以通过调用
来解决./MyMainProgram > log.txt 2> stderr_log.txt
我如何用同样的方法解决这个问题,使我的LogRotator捕获所有内容?
这将在管道到LogRotator之前将STDERR合并为STDOUT:
./MyMainProgram 2>&1 | ./LogRotator
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- std::cout 来自多个线程
- 带有 std::cout 的多线程控制台文本动画
- 在使用 std::cout 和多线程程序中如何避免数据竞争<iomanip>?
- 死锁使用 std::mutex 来保护多个线程中的 cout
- if 语句仅在前面有调试 cout 行(C 中的多线程)时才通过
- 将 std::cout 从单独线程中的 DLL 重定向到 QTextEdit
- 线程安全std::cout的死锁
- 提升线程:cout 行为
- 在 c++ 中多线程处理时与 cout 和 printf 的区别
- 用于多线程的快速同步cout
- 在多个线程中使用std::cout
- 同步STD cout输出多线程
- 如果不使用 pthread_join(),为什么'cout'语句从特定线程打印两次(即使它是同步的)?
- c++: Linux:管道到我的程序从多个线程或流,而不是' cout '
- 循环system()和cout的线程会破坏堆栈
- 多个线程写入std::cout或std::cerr
- IOstream线程安全,必须将cout和cerr分开锁定