Java:根据pid获取进程

13

假设我已经知道当前正在运行的进程,如何将其转换为Java中的Process对象?

该进程已经在运行,所以我不想再启动另一个进程,我只想将它封装到一个Process对象中,以便在Java代码中使用。

类似于:

int pid = getPid();
Process proc = magicGetProcess(pid);

感谢


我认为Java内置的进程管理能力不足。希望有人可以证明我是错的。 - Alex Jasmin
你最希望使用Process的哪些功能呢?你是想要执行waitFor(),还是希望能够将输入/输出流重定向到你的应用程序中,或者其他什么需求?我相当确定你所要求的本身是不可能实现的,但我们可能可以帮助你满足实际需求。 - Mark Peters
我需要将这个进程传递到一个方法中,该方法基本上检查它是否意外终止,并在其意外终止时获取退出代码。 - Th3sandm4n
请参考:https://dev59.com/zV3Va4cB1Zd3GeqPB5iw - AlikElzin-kilaka
4个回答

4
我认为仅使用内置库是不可能实现的。据我所知,获取运行进程自身的PID已经很复杂(请参阅功能请求备用机制)。
快速查看java.lang.Process,您可以通过使用JNI和本地代码编写自定义实现的java.lang.Process类。然后,您的自定义类可以实现额外的方法,例如您问题中提到的方法。

嗯,是的,看起来是这样。哦,好吧。 - Th3sandm4n
FYI:java.lang.Process的URL已损坏。 - Ismoh

0

使用RMI怎么样?将一个Process对象传递给它所在的进程可能吗?可能不行,因为Process不可序列化。


0
在*nix世界中,获取非子进程的退出代码并不容易,因为一旦父进程捕获了子进程的退出代码,该退出代码就会随着进程一起消失。您可以使用一些跟踪工具连接到正在运行的进程,并在进程终止时获取其退出代码。大多数*nix操作系统都有命令行工具可以让您以非侵入方式执行此操作(例如Linux上的strace,SunOS上的truss)。但是,您只能针对自己的进程或以root身份运行时使用它们。另一种选择是配置您的操作系统的审计子系统以记录所有进程的退出代码。

在Unix上,您可以使用waitpid()函数来获取非子进程的退出代码。问题是如何从Java中调用它。 - Alex Jasmin

0

不行。Process 中的每个操作都要求该进程是子进程,而不是任意进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接