Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse:在重新运行之前终止当前进程_Java_Eclipse_Jetty - Fatal编程技术网

Java Eclipse:在重新运行之前终止当前进程

Java Eclipse:在重新运行之前终止当前进程,java,eclipse,jetty,Java,Eclipse,Jetty,我正在开发一个小型服务器应用程序,它使用嵌入式。该服务绑定到TCP端口并在后台运行。由于应用程序没有完成(它是一个服务),我必须手动终止进程,然后才能重新运行它(例如,因为当前进程正在使用TCP端口) 在Eclipse中,是否可以在我重新启动当前进程之前自动终止它?您可以通过代码方式来完成,而不是使用任何Eclipse配置,我觉得这样做更好。启动应用程序时,只需检查系统中运行的进程,并搜索要启动的进程。如果您发现该应用程序正在运行,请向其发送终止信号,然后继续启动。希望有帮助。如果您不使用ecl

我正在开发一个小型服务器应用程序,它使用嵌入式。该服务绑定到TCP端口并在后台运行。由于应用程序没有完成(它是一个服务),我必须手动终止进程,然后才能重新运行它(例如,因为当前进程正在使用TCP端口)


在Eclipse中,是否可以在我重新启动当前进程之前自动终止它?

您可以通过代码方式来完成,而不是使用任何Eclipse配置,我觉得这样做更好。启动应用程序时,只需检查系统中运行的进程,并搜索要启动的进程。如果您发现该应用程序正在运行,请向其发送终止信号,然后继续启动。希望有帮助。如果您不使用eclipse,它会一直工作P

这是我一两年前写的一个片段,从那以后一直做得很好。只需添加一个包声明。从您想要终止拥有端口的进程的任何位置调用此函数,例如main()


Jetty还有一个ShutdownHandler,您可以将它连接到处理程序链中,该处理程序链将接受来自localhost的连接,该连接带有一个可以触发正常关闭的密钥

或者,您可以使用对服务器对象的引用连接自己的组件,该服务器对象只在另一个端口上侦听要传递给它的停止密钥

在命令行中,“jps”是获取java进程列表的最有用的方法。

EclipseOxygen(4.7) 添加了该功能

有两种可能的方法:

  • 按下Shift键,同时单击运行按钮

  • 转到窗口首选项运行/调试启动检查启动时终止并重新启动(在启动过程中按“Shift”键从菜单或工具栏切换)应用并关闭运行应用程序


  • 也许我应该补充一点,当然,使用exec和sh,这取决于操作系统环境,尤其是
    lsof
    。我知道如何在Windows中运行
    exec
    kill
    ,但是
    lsof
    肯定更难。我可以解析netstat-ano的输出。但我不敢相信没有任何简单的解决办法。如果bash可用,一切都很简单,但目前我需要这个用于Windows。是的,这是一个问题。。。关于Eclipse解决方案,我也搜索了它,但没有找到。有时在调试视图的进程列表中有一个“Kill and Relaunch”上下文菜单选项,但是如何将其绑定到一个键组合。。。太糟糕了,Eclipse似乎没有重新启动。我甚至希望它成为调试时的默认行为!只是想到了一个跨平台的解决方案。。。从应用程序内部轮询某个文件的File.lastModification(),最简单的方法是从线程执行。可能是目标/目录中的文件?然后,要么在构建过程中写入该文件,要么在构建过程中立即终止该进程。或者在新流程启动时对其进行修改。与杀死港口所有人相比的优势:没有意外的附带损害。缺点:需要合作。目前我更喜欢,因为它指示前一个线程结束自己-你不能做得更顺利。我认为这是正确的做法。“只需检查系统中运行的进程”——这并不是那么简单。要按名称查找进程,需要先给它命名(不容易)。要按端口/套接字使用情况查找进程,您需要找出谁在使用端口(如果与平台无关,则不容易)。可以写入PID文件或类似的文件,但这需要对具有固定名称的特定文件进行写入访问…@steffen,是的,非常正确。pid选项是我们在工作场所遵循的。只要文件位于应用程序的日志目录或类似目录中,对某个文件具有写访问权限会有什么问题?至少这将为您提供一种更平滑的方法来解决您的问题,并且主要是独立于eclipse的。现在我有了一个服务控制接口,可以停止并重新启动服务器。美好的
    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();
            }
        }
    }