Closed 4ra1n closed 2 years ago
这个问题我研究了一段时间,发现没有很好的解决方案,目前有功能需要Process.pid()方法,但是这个方法在JDK9+以后可以用。研究发现在JDK8里可以用JNA和反射拿到这个pid值,但后果是工具只能跑在JDK8下。如果使用这个方式解决,在JDK9+里会遇到反射Filter黑名单。我找到BeichenDream师傅的bypass代码,虽然可以成功,但是稳定性存疑,且在某个高版本后这个方式应该会失效。综上所述,与其找各种方式,最终实现一个不稳定的版本,为了能兼容JDK8可能不妥。现在考虑的方案是每个新版本提供两种:仅在JDK8下可用和JDK9-19可用的版本。
Process.pid()
JDK9+
JDK8
JNA
pid
Filter
BeichenDream
bypass
JDK9-19
还有一种愚蠢的办法,是使用tasklist/ps拿到pid再taskkill/kill停止,不打算这样做。
tasklist/ps
taskkill/kill
已解决
这个问题我研究了一段时间,发现没有很好的解决方案,目前有功能需要
Process.pid()
方法,但是这个方法在JDK9+
以后可以用。研究发现在JDK8
里可以用JNA
和反射拿到这个pid
值,但后果是工具只能跑在JDK8
下。如果使用这个方式解决,在JDK9+
里会遇到反射Filter
黑名单。我找到BeichenDream
师傅的bypass
代码,虽然可以成功,但是稳定性存疑,且在某个高版本后这个方式应该会失效。综上所述,与其找各种方式,最终实现一个不稳定的版本,为了能兼容JDK8
可能不妥。现在考虑的方案是每个新版本提供两种:仅在JDK8
下可用和JDK9-19
可用的版本。