假设我有一个已知的当前正在运行的进程,我怎样才能将它变成 Java 中的 Process 对象?该进程已经在运行,所以我不想生成另一个进程,我只想将它封装到可以在 java 代码中使用的 Process 对象中。类似于以下内容:
int pid = getPid();
Process proc = magicGetProcess(pid);
谢谢
我认为仅使用内置库是不可能的。AFAIK,获得正在运行的进程自己的 PID 已经很重要了(请参阅功能请求和替代机制)。
快速浏览java.lang.Process
该类表明您可以编写java.lang.Process
使用 JNI 和本机代码的自定义实现。然后,您的自定义类可以实现额外的方法,例如您问题中的方法。
在 *nix 世界中,获取非子进程的退出代码并不容易,因为一旦父进程获取了子进程的退出代码,退出代码就会与进程一起消失。您可以使用一些跟踪工具附加到正在运行的进程,并在进程终止时获取其退出代码。大多数 *nix 操作系统都有命令行工具,可以让您以非侵入式的方式执行此操作(例如 Linux 上的 strace,SunOS 上的 truss)。但是,您只能将它们用于您自己的进程或以 root 身份运行。另一种选择是配置操作系统的审计子系统来记录所有进程的退出代码。
你不能。Process 中的每个操作都要求该进程是子进程。不是一个任意的过程。
使用 RMI 怎么样?是否可以将 Process 对象传递给 Process 对象?可能不是,因为 Process 不可序列化