java - 拦截正在运行的 Java 程序的输出

标签 java

是否可以从已运行的 Java 程序中获取/拦截输出?

这是我的情况:我正在运行一个需要几个小时才能完成的程序。所以我启动它,让计算机完成它的工作。我可以使用 SSH 登录运行该程序的计算机并查看它使用 ps 运行,但我想拦截写入控制台的输出。

有什么办法吗?

我需要提供额外的信息吗?

最佳答案

screen session 中启动应用程序,从 session 中分离,稍后您可以通过 ssh 登录并重新连接以查看进度。 这是关于 using screen 的一些信息.

另一种选择是将标准输出和标准错误重定向到一个文件,并使用类似tail 的东西来查看它的内容。示例:my_program &>/tmp/output

好吧,我刚刚意识到我有点跑题了,因为我处理过你必须提前思考的案例。现在,如果您想从正在运行的进程中获取它,您可以使用 gdb

gdb -p process_id
(gdb) p close(1)
$1 = 0
(gdb) p creat(“/tmp/output″, 0600)
$2 = 1
(gdb) q

这会将输出放入 /tmp/output,您可以使用 tail 以交互方式查看它。

关于java - 拦截正在运行的 Java 程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773985/

相关文章:

java - Struts 2 - 通过迭代动态填充 optgroup

Java 8 Lambdas flatmapping、groupingBy 和 mapping 以获取 T 和 List<K> 的 Map

java - 获取包含的 jar 的 NoClassDefFoundError

java - 无法找到类型 : io. vertx.core.http.HttpServerRequesta 的上下文数据

java - 500, Retrofit 2 中的内部服务器错误

java - 为什么我的 thymeleaf 重定向不起作用?

java - 实现 JSch 在 Android 应用程序中运行 ssh 命令

java - Android Studio : 'Instant Run' grayed out for all my projects

java - 支持桌面和桌面浏览器,但浏览器仍然挂起

java - Birt报表-IReportEngineFactory为空