【问题标题】:capturing stderr and stdout from an already running process in solaris从 solaris 中已经运行的进程中捕获 stderr 和 stdout
【发布时间】:2010-12-04 22:09:33
【问题描述】:

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

【问题讨论】:

    标签: process solaris stdout stderr


    【解决方案1】:

    如果进程已经在运行,您可以使用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 会话中运行程序,当您想与程序交互时,您可以重新连接到该会话。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-06-23
        • 2014-10-14
        • 1970-01-01
        • 2013-09-02
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多