程序捕获其他程序stderr和stdout

时间:2018-02-15 21:02:46

标签: linux process linux-kernel stdout io-redirection


我想以root身份运行一个程序,可以拦截其他程序stderrstdout
例如,假设我启动一个nodejs服务器,并且出现错误(日志打印到stderr),如果我的程序正在运行,我希望它能拦截此错误。< / p>

这可能吗?我应该怎么做 ?

此外,我想到的一个想法是将nodejs二进制文件替换为另一个启动nodejs并将stderr重定向到自定义文件的二进制文件。但我觉得它太乱了,我希望有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

如果您可以控制nodejs的调用方式,您可以将stderr重定向到命名管道,然后从另一个命令读取命名管道,如下所示:

mkfifo /tmp/nodejs.stderr
nodejs 2>/tmp/nodejs.stderr

然后在其他一些shell类型中:

grep "Error Pattern" </tmp/nodejs.stderr

如果你无法控制如何调用nodejs,那么你可以创建一个shell脚本来包装这些命令,并在调用nodejs的地方调用shell脚本。