从solaris中已经运行的进程中捕获stderr和stdout

时间:2009-10-08 08:48:59

标签: process solaris stdout stderr

我有一个当前正在运行的进程(arserverd)由用户“补救”启动。我可以以此用户身份登录。我想捕获stderr和stdout而不重新启动进程。这可能吗?

2 个答案:

答案 0 :(得分:4)

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

truss -w 1,2 -p pid_of_arserverd

桁架将输出类似

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

Truss特定于Solaris。在linux系统上,请寻找strace

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

答案 1 :(得分:0)

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