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