我正在开发一个使用嵌入式码头网络服务器的小型服务器应用程序。该服务绑定到 TCP 端口并在后台运行。由于应用程序没有完成(它是一项服务),我必须手动终止该进程,然后才能重新运行它(例如,因为当前进程正在使用 TCP 端口)。
在我重新启动之前,Eclipse 是否可以自动终止当前进程?
你可以用代码的方式来做,而不是使用任何我觉得更好的 eclipse 配置。启动应用程序时,只需检查系统中运行的进程并搜索要启动的进程。如果您发现该应用程序正在运行,请向该应用程序发送终止信号,然后继续启动。希望有帮助。如果您也不使用 eclipse,它随时都可以使用。:P
这是我在一两年前写的一个片段,从那以后它一直做得很好。只需添加一个包声明。从你想杀死拥有一个端口的进程的任何地方调用它,比如你的 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();
}
}
}
Jetty 还有一个 ShutdownHandler,您可以将其连接到您的处理程序链中,该处理程序链将接受来自 localhost 的连接,该连接带有可以触发正常关闭的密钥。
或者,您可以将自己的组件与对 Server 对象的引用连接起来,该对象仅在另一个端口上侦听以获取要传递给它的停止键。
在命令行中,'jps' 是获取 Java 进程列表的最有用的方法。