Linux查看端口、kill端口(仅适用Linux)

Linux查看端口、kill端口(仅适用Linux)
小码同学解决 进程PID kill不掉 端口关不掉
问题描述
我需要用到3306端口,但我想使用docker安装mysql,但是3306端口一直显示被占用,可能是我在这之前安装的mysql没有删除干净。
一般来说,端口被占用了,直接kill都能停止该端口进程,但是我这里就一直kill不掉。
从图中可以发现问题的症结所在:从最高层来看,它是由Systemd 系统守护进程调用的。可以简单的理解成:Systemd是mysqld的祖先进程。
Systemd是操作系统的第一个进程(PID等于1),其他的进程都是它的子进程;它的设计目标是,为系统的启动和管理提供一套完整的解决方案;Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面;Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。
问题解决:停止父级进程
首先在这我们需要明确,并不是kill进程不成功,事实上,kill进程成功了,所以mysqld结束,PID 5277释放;但是它又被其他服务唤醒,所以mysqld换了一个新的PID 9580 ,仍旧占据着端口号3306。
1 | # pstree -asp PID # 通过子进程查找父级进程 |
方法一: lsof
lsof(list open files)是一个列出当前系统打开文件的工具。
lsof 查看端口占用语法格式:
查看端口 lsof
1 | # lsof -i:端口号 |
此时8000端口被NodeJS占用
停止端口进程
1 | # kill -9 PID |
更多lsof命令
1 | lsof -i:8080 # 查看8080端口占用 |
-bash: lsof: 未找到命令
安装
这是因为系统没有安装到lsof该命令,我们可以安装扩展包。
1 | yum -y install lsof |
方法二:netstat
查看端口
1 | netstat -tunlp | grep 端口号 |
-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n拒绝显示别名,能显示数字的全部转化为数字-l仅列出在Listen(监听)的服务状态-p显示建立相关链接的程序名
更多命令
1 | netstat -ntlp # 查看当前所有tcp端口 |
杀掉端口
1 | # kill -9 PID |
-bash: netstat: 未找到命令
安装
这是因为系统没有安装到net-tools该命令,我们可以安装扩展包。
1 | yum -y install net-tools |
kill补充
Linux kill 命令用于删除执行中的程序或工作。
kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。
使用语法
1 | kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>] |
参数说明:
-l <信息编号>若不加<信息编号>选项,则-l参数会列出全部的信息名称。-s <信息名称或编号>指定要送出的信息。[程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
使用kill -l命令列出所有可用信号。
最常用的信号是:
1 | - 1 (HUP):重新加载进程。 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果










