Bootstrap

关闭占用端口的程序 , 关闭tomcat , 关闭springboot , 杀进程

Windows杀占用端口的进程

1.用 netstat -ano | findstr 端口号
找到占用端口的程序的pid

netstat -ano | findstr 8080

2.然后用 taskkill /pid pid /f 杀进程

taskkill /pid pid /f




Linux杀占用端口的进程

方法1:用fuser

sudo fuser -k -n tcp 8080

方法2:用netstat -anp 加 kill -9

1.用netstat -anp | grep 端口号
找到占用端口的进程的pid

netstat -anp | grep 8080

2.kill -9 pid 杀进程

kill -9 pid

Linux的netstat 和 Windows 的netstat 名称相同, 参数 -anp-ano 也接近, 方便记忆
但连已过时的CentOS7都默认没装 netstat 而预装了 ss命令
想使用netstat, 可安装 net-tools

sudo yum install net-tools -y

方法3: 用 ss -tclnpss -anp 找到端口对应的pid, 然后 kill -9 pid

ss 用法基本和netstat相似, ss更新更块
ssnetstat 在CentOS7下的一个对比👇

[root@1235vb-c7min samba]# netstat -lnp | grep 445
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      18707/smbd
tcp6       0      0 :::445                  :::*                    LISTEN      18707/smbd
[root@1235vb-c7min samba]# ss -lnp | grep 445
tcp    LISTEN     0      50        *:445                   *:*                   users:(("smbd",pid=18707,fd=36))
tcp    LISTEN     0      50     [::]:445                [::]:*                   users:(("smbd",pid=18707,fd=34))
[root@1235vb-c7min samba]# netstat -tulnp | grep 445
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      18707/smbd
tcp6       0      0 :::445                  :::*                    LISTEN      18707/smbd
[root@1235vb-c7min samba]# ss -tulnp | grep 445
tcp    LISTEN     0      50        *:445                   *:*                   users:(("smbd",pid=18707,fd=36))
tcp    LISTEN     0      50     [::]:445                [::]:*                   users:(("smbd",pid=18707,fd=34))
[root@1235vb-c7min samba]# netstat -anp | grep 445
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      18707/smbd
tcp        0      0 22.125.0.0:445          22.0.0.1:61827          ESTABLISHED 19409/smbd
tcp6       0      0 :::445                  :::*                    LISTEN      18707/smbd
unix  3      [ ]         STREAM     CONNECTED     16445    672/dbus-daemon      /run/dbus/system_bus_socket
[root@1235vb-c7min samba]# ss -anp | grep 445
u_str  ESTAB      0      0         * 15636                 * 16445               users:(("NetworkManager",pid=703,fd=11))
u_str  ESTAB      0      0      /run/dbus/system_bus_socket 16445                 * 15636               users:(("dbus-daemon",pid=672,fd=14))
tcp    LISTEN     0      50        *:445                   *:*                   users:(("smbd",pid=18707,fd=36))
tcp    ESTAB      0      0      22.125.0.0:445                22.0.0.1:61827               users:(("smbd",pid=19409,fd=40))
tcp    LISTEN     0      50     [::]:445                [::]:*                   users:(("smbd",pid=18707,fd=34))

方法4: 用 lsof

步骤 1: 使用 lsof 查找占用端口的进程

lsof(list open files)是一个列出当前系统打开文件的工具,由于在Unix和Linux中,一切皆文件,包括网络连接,所以你可以使用lsof来查找占用某个端口的进程。

例如,如果你想查找占用端口8080的进程,你可以运行以下命令:

lsof -i :8080

这个命令会列出所有占用端口8080的进程的信息,包括进程ID(PID)。

步骤 2: 使用 kill 杀死进程

一旦你找到了占用端口的进程的PID,你可以使用kill命令来杀死它。例如,如果PID是12345,你可以运行以下命令:

kill -9 12345

这里的-9选项表示发送SIGKILL信号来强制杀死进程。请注意,强制杀死进程可能会导致数据丢失或其他问题,所以最好先尝试不带-9选项的kill命令,它会发送SIGTERM信号来请求进程正常退出。

合成一步

将上述两个步骤结合起来,你可以使用以下命令来查找并杀死占用端口8080的进程:

kill -9 $(lsof -t -i :8080)

这个命令首先运行lsof -t -i :8080来查找占用端口8080的进程的PID,并将PID传递给kill -9来杀死该进程。这里的-t选项告诉lsof只输出PID,而不输出其他信息。

请注意,在运行这些命令时,你可能需要具有足够的权限(例如,使用sudo)。


对比W和L的 netstat

WindowsLinux
netstat -ano | findstrnetstat -anp | grep
anoanp
taskkill /pid pid /fkill -9 pid
;