【发布时间】:2010-12-04 22:09:33
【问题描述】:
我有一个由用户“remedy”启动的当前正在运行的进程 (arserverd)。我能够以该用户身份登录。我想在不重新启动进程的情况下捕获标准错误和标准输出。这可能吗?
【问题讨论】:
标签: process solaris stdout stderr
我有一个由用户“remedy”启动的当前正在运行的进程 (arserverd)。我能够以该用户身份登录。我想在不重新启动进程的情况下捕获标准错误和标准输出。这可能吗?
【问题讨论】:
标签: process solaris stdout stderr
如果进程已经在运行,您可以使用truss 命令拦截对文件描述符 1 或 2 的写入:
truss -w 1,2 -p pid_of_arserverd
Truss 会输出类似的线
write(1, " m e s s a g e\n", 8) = 8
Truss 是 Solaris 特有的。在 linux 系统上,请寻找 strace。
Truss 会在一定程度上减慢您正在捆绑的过程,因此您不希望一直使用它。如果您正在寻找永久解决方案,最好的办法可能是在启动程序时将 stdout 和 stderr 重定向到文件。您可以定期截断文件以使其大小易于管理。另一种方法是在screen 会话中运行程序,当您想与程序交互时,您可以重新连接到该会话。
【讨论】:
我不这么认为,但您可以尝试从 /proc/PID/fd/1 读取 stdout 和 /proc/PID/fd/2 读取 stderr(将 PID 替换为进程的 PID)。
【讨论】: