Java:获取给定 pid 的进程

2022-09-04 23:17:15

假设我有一个已知的当前正在运行的进程,我如何将它变成Java中的进程对象?该进程已经在运行,因此我不想生成另一个进程,我只想将其封装到可以在java代码中使用的Process对象中。大致如下:

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

谢谢


答案 1

我不认为仅使用内置库是不可能的。AFAIK,获取正在运行的进程自己的PID已经不是一件容易的事了(请参阅功能请求替代机制)。

快速浏览一下 java.lang.Process,就会发现您可以继续编写使用 JNI 和本机代码的自定义实现。然后,您的自定义类可以实现额外的方法,例如问题中的方法。java.lang.Process


答案 2

在*nix世界中,获取非子进程的退出代码并不容易,因为一旦父进程获取了子进程的退出代码,退出代码就会与进程一起消失。您可以使用某些跟踪工具附加到正在运行的进程,并在进程死亡时拾取其退出代码。大多数*nix操作系统都有命令行工具,可以让你以非侵入性的方式做到这一点(例如Linux上的strace,SunOS上的truss)。但是,您只能将它们用于您自己的进程或以 root 用户身份运行。另一种方法是配置操作系统的审计子系统以记录所有进程的退出代码。


推荐