捕获外部过程输出
Capture external process output
不要将其作为重复项关闭,因为与类似的问题相比,我有一个微妙但显著的变化:
当我没有创建进程时,是否可以在java中捕获外部进程(即stdout)的输出,而我只知道进程名称?
我在7号窗户上跑步。
编辑:
如果有一种方法可以用其他语言(C#\C++)实现,那么我可以编写一个"CaptureOutput"程序来捕获输出,写入stdout,并在我的java代码中启动"CaptureOutput"并读取其stdput。
丑陋,但可能有用。
所以其他语言的答案我也可以。
首先让我说,您的要求打破了流程隔离的所有规则。如果您的进程没有创建要捕获其输出的进程,并且您也无权修改调用进程(命令shell?服务管理器?您没有说明是哪个)。那么,你唯一的机会,充其量也是一个渺茫的机会,就是将一个线程注入到进程中,当它的所有其他线程都挂起时,更改全局stdout(和stderr?)。这只能由对目标进程具有完全访问权限的进程来完成。在跑步过程中进行这样的手术不适合心脏虚弱的人。
你试图做的事情非常危险。很容易意外地破坏您试图进入的进程的内存。测试,测试,测试。然后再测试一些。祝你好运——我知道我不想非得这么做。
这篇文章——API Hooking——解释了如何开始使用您想要的东西(使用C++)。一旦将代码注入正在运行的进程中,就会有其他Windows API调用来替换STDOUT(例如SetStdHandle)。
您可以控制流程何时启动吗?如果是这样的话,您可以启动该进程,并让它将其stdout管道传输到一个可以读取的文件,或者传输到您编写的另一个程序,该程序可以将其记录在数据库、事件查看器等中。
在Linux下,检查操作系统的IPC机制,如消息队列、管道、共享内存和套接字。这些机制允许进程间通信。尽管如此,如果您对程序的输出特别感兴趣,变通方法可以让第一个进程将数据输出到磁盘上的文件中,并使用单独的进程进行读取。通过这种方式,您可以为任务使用多种语言。一个简单的例子是让C++将一些数据写入一个文件,并在给定相同文件的情况下使用JAVA读取/使用数据。希望我能回答,如果有的话。
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- 使用提升过程获取 shell 命令的标准输出
- C++ 我不知道此代码中的输出过程(父类子级)
- 如何在编译过程中输出C 类型信息
- C#类过程 - 控制C 应用程序,不可能读取输出
- 创建子过程并从中获取实时输出.(欢迎跨平面解决方案)
- 如何将QString绑定到QSQLQUERY,该呼叫过程输出VARCHAR
- 如何在C++中可视化 Caffe 深度学习过程的各个层输出?
- 使用 QSqlQuery 检索 MySQL 存储过程的输出
- 捕获外部过程输出
- 是一个没有输入/输出过程的函数
- 如何传递Blitz++子数组作为过程的输入/输出参数
- MSSQL服务器存储过程在从c++调用时不返回输出参数
- 防止在过程相似但输出不同的函数中出现代码重复
- 使用OCILIB调用带有输出变量的Oracle过程
- 如何在POCO中获得存储过程的输出参数?
- 在递归函数中,c++基转换过程中意外输出到屏幕
- 如何在输入和输出过程中连续闪烁特定的文本