在sigpipe之后恢复stdout和stderr

时间:2016-04-19 13:18:57

标签: c++ bash pipe signals

当我这样做时

executable 2>&1 | asan_symbolize.py

其中executable是一个C ++可执行文件,我将stdout和stderr都传递给asan_symbolize.py(对于泄漏卫星和地址消毒器来说更漂亮)

当我将SIGINT发送到整个流程组时,asan_symbolize.py退出,executable收到(作为第二个信号)SIGPIPE。由于管道很快关闭,executablestdoutstderr的信号处理输出消失了,因为stdoutstderr已经被销毁。

tee收到stdout之后,是否有解决方案(类似stderr之间的内容?)使SIGPIPEexecutable重定向到终端?

也许我需要一个我目前不知道的不同解决方案,我运气不好......

1 个答案:

答案 0 :(得分:1)

可以用于ttys的脏技巧(从stdin重建stdout和stderr)。在SIGPIPE的信号处理程序内

void sigpipe_handler(int s)
{
  dup2 (0, 1);
  dup2 (0, 2);
}