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

发布于 2024-08-06 21:21:58 字数 99 浏览 6 评论 0原文

我有一个当前正在运行的进程(arserverd),该进程是由用户“remedy”启动的。我能够以该用户身份登录。我想捕获 stderr 和 stdout 而无需重新启动进程。这可能吗?

I've got a process that is currently running (arserverd) that was started by user "remedy". I am able to log in as this user. I would like to capture stderr and stdout without restarting the process. Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鱼窥荷 2024-08-13 21:21:58

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

If the process is already running, you could use the truss command to intercept writes to file descriptor 1 or 2:

truss -w 1,2 -p pid_of_arserverd

Truss will output lines like

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

Truss is specific to Solaris. On linux systems, look for strace instead.

Truss will slow down the process that you're trussing somewhat, so it's not something you'd want to use all the time. If you're looking for a permanent solution, your best bet is probably to redirect stdout and stderr to a file when launching the program. You can regularly truncate the file to keep its size manageable. An alternate is to run the program within a screen session that you can reconnect to when you want to interact with the program.

青瓷清茶倾城歌 2024-08-13 21:21:58

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

I don't think so but you can try to read from /proc/PID/fd/1 for stdout and /proc/PID/fd/2 for stderr (replace PID with the PID of the process).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文