从java管理unix进程的最佳方法是什么?

ero*_*ppa 5 java unix posix

我正在寻找一些简单的任务,比如列出用户的所有正在运行的进程,或者通过pid等来杀死特定的进程.来自Java的基本unix进程管理.那里有一个相对成熟且有文件记录的图书馆吗?我可以从JVM运行一个外部命令,然后解析标准输出/错误,但这似乎很多工作,而且根本不健壮.有什么建议?

Ste*_*n C 4

我认为您需要推出自己的解决方案。Process可以使用 来终止使用 API 创建的外部进程Process.destroy()。(但请注意,destroy()在 Linux / Unix 上实现的是“软”终止,而不是SIGKILL,因此外部进程可能能够避免被终止。)

除此之外的任何东西都是不可移植的。

  • 列出进程(在 Linux 机器上)可以通过读取文件系统来完成/proc
  • 其他事情可以通过使用 调用本机命令来完成Process。这取决于您的管理功能是否需要使用“纯”Java 程序无法使用的系统调用。
  • (理论上)可以使用 JNI 和本机代码来挖掘 JVM 的本机数据结构,以找到进程的操作系统级 PID 并向其发送信号。

如果您走 JNI + 本机库路线,请注意本机指针问题和本机线程问题可能会杀死您的 JVM。您可能还需要处理为多个架构等构建和分发本机库的问题。还要注意,对于不同的 JVM 平台、版本等,内部数据结构可能会有所不同,并且它们可能会在没有通知的情况下发生更改。