我想以 root 身份运行一个程序,该程序可以拦截其他程序的 stderr
和 stdout
。
例如,假设我启动了一个 nodejs
服务器并且不知何故出现错误(日志打印到 stderr
),如果我的程序正在运行,我希望它拦截这个错误.
这可能吗?我应该怎么做 ?
此外,我想到的一个想法是用另一个启动 nodejs
并将 stderr
重定向到自定义的二进制文件替换 nodejs
文件。但我认为它太困惑了,我希望有更好的方法来做到这一点。
最佳答案
如果您可以控制 nodejs
的调用方式,您可以将 stderr
重定向到命名管道,然后从另一个命令读取命名管道,如下所示:
mkfifo /tmp/nodejs.stderr
nodejs 2>/tmp/nodejs.stderr
然后在其他一些 shell 类型中:
grep "Error Pattern" </tmp/nodejs.stderr
如果您无法控制如何调用 nodejs,那么您可以创建一个 shell 脚本来包装这些命令,并在调用 nodejs 的任何地方调用 shell 脚本。
关于linux - 捕获其他程序stderr和stdout的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816219/