linux - 捕获其他程序stderr和stdout的程序

标签 linux process linux-kernel stdout io-redirection


我想以 root 身份运行一个程序,该程序可以拦截其他程序的 stderrstdout
例如,假设我启动了一个 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/

相关文章:

linux - wc 只有文件而不是目录

c++ - 在 Linux 上使用 MinGW 交叉编译 C++ 代码,目标是 Windows : error happens

java - 哪个 CPU 使用率反射(reflect)了真实情况?

c - 如何在C语言中正确使用execvpe()?

java - 尝试将 Project Loom/Virtual Threads 与 OpenJDK 19-loom JAVA 结合使用时出现问题

linux - Linux 将 'ruid' 和 'euid' 保存在哪里?

python - 如何使用 ctypes 加载链接到非默认 libc 的库?

c# - 杀死或关闭进程

c - 在启动时自动加载模块和目标文件

android - 打包自定义 Android boot.img 报错