应用程序崩溃且端口已被使用时出现 java.net.BindException

应用程序崩溃且端口已被使用时出现 java.net.BindException

我刚刚使用默认端口在 ubuntu 服务器上运行了一个 jar。使用ctrl+停止了该 jar z。重新启动时,端口已占用,操作系统尚未释放该端口以供使用。

我想使用该端口而不等待操作系统释放它,有没有办法可以对其进行硬修复或请求操作系统释放该端口?此外,有没有更好的方法可以在不使用ctrl+ 的情况下停止正在运行的 jar z

答案1

近乎复制CTRL + Z 对 unix\Linux 应用程序有何影响https://unix.stackexchange.com/questions/135077/ctrl-c-vs-ctrl-z-with-foreground-job

除非你弄乱了你的 stty 设置,在这种情况下你最好不要问这个问题:

Ctrl+Z“停止”用常见的 Unix 术语来说,进程但“停止”并不意味着“结束”. 使用 Ctrl+Z“停止”的进程实际上是冻结的,但您可以恢复它,无论是在后台(因此它会运行但不使用终端)还是在前台(运行并使用终端)。在“停止”期间,它会保持文件和套接字打开,而打开的套接字会继续“保留”端口。可以把它想象成街道上的红绿灯:当您到达红绿灯时,您必须在红灯亮时停下来并待在一个地方,但当它变绿时,您可以恢复移动(如果您不这样做,人们会开始按喇叭,至少在美国是这样)。有些人和工具使用“suspend[ed]”这个词,您可能会觉得更清楚。

要非自愿地结束终端上的进程(在前台),请使用 Ctrl+C,Unix 称之为“中断”(INTR)。如果进程未在终端的前台运行,则可以使用kill(传统上是程序,现在是 shell 内置命令)和 PID(进程 ID)编号;如果您找到正确的 PID,这甚至适用于在另一个 shell 下运行的进程。如果它在您的 shell 下暂停或在后台运行,则可以使用内置命令kill(仅)和内置命令列表中显示的作业 ID jobs

程序也可以自愿退出,具体取决于程序。运行 jar 用来java以该 jar 中指定的主类作为线程运行 Java 程序;程序可能会创建其他线程。如果每个线程都从其主类或初始类返回,或者任何线程调用System.exit()java退出。要确定此 Java 程序是否以及如何执行这些操作,您需要查看 Java 程序,或者与可以查看或已经查看过该程序的其他人交流。

相关内容