我正在开发一个使用嵌入式jetty web server的小型服务器应用程序。该服务绑定到TCP端口并在后台运行。由于应用程序不会结束(它是一个服务),因此在重新运行之前,我必须手动终止该进程(例如,因为TCP端口正在当前进程中使用)。
在Eclipse中,是否可以自动终止当前进程,然后再重新启动它?
在Eclipse中,是否可以自动终止当前进程,然后再重新启动它?
另外,您可以使用对服务器对象的引用连接自己的组件,在另一个端口上侦听停止键的传递。
在命令行上,“jps”是获取Java进程列表的最有用的方法。
这是我一两年前写的代码片段,至今一直表现良好。只需添加一个包声明即可。从任何你想要杀死拥有端口的进程的地方调用此代码,例如你的main()函数。
import java.io.IOException;
public class KillPortHolderSimple {
public static void killHolderOfPort(int port) {
final String how = "-KILL";
try {
Runtime.getRuntime().exec(new String[]{"sh", "-c", "lsof -i :" + port + " -t | xargs kill " + how});
} catch (IOException e) {
e.printStackTrace();
}
}
}
lsof
. 我知道如何在Windows中运行exec
和kill
, 但lsof
肯定更困难。我可以解析netstat -ano
的输出。但我无法相信没有任何简单的解决方案。如果可用bash, 一切都很容易,但目前我需要这个功能在Windows上。 - steffen