2

我有一个由用户“remedy”启动的当前正在运行的进程(arserverd)。我能够以该用户身份登录。我想在不重新启动进程的情况下捕获标准错误和标准输出。这可能吗?

4

2 回答 2

4

如果进程已经在运行,您可以使用truss命令拦截对文件描述符 1 或 2 的写入:

truss -w 1,2 -p pid_of_arserverd

桁架将输出如下行

write(1, " m e s s a g e\n", 8)                     = 8

桁架是 Solaris 特有的。strace在 linux 系统上,改为寻找。

桁架会在一定程度上减慢您捆绑的过程,所以它不是您一直想要使用的东西。如果您正在寻找永久解决方案,最好的办法可能是在启动程序时将 stdout 和 stderr 重定向到一个文件。您可以定期截断文件以使其大小易于管理。另一种方法是在screen会话中运行程序,当您想与程序交互时,您可以重新连接到该会话。

于 2009-10-09T20:59:03.707 回答
0

我不这么认为,但您可以尝试从/proc/PID/fd/1for stdout 和/proc/PID/fd/2for stderr 中读取(替换PID为进程的 PID)。

于 2009-10-08T08:57:34.847 回答