Mac如何在终端用命令kill掉某个指定端口?

打印 上一主题 下一主题

主题 682|帖子 682|积分 2046

1. 场景还原

我们在Mac上运行某个应用时(如Tomcat、Java应用等)大概会提示“Port xxxx was already in use”错误,比方下面启动Java项目时报错:



2. 错误缘故起因

该服务监听的端口被其它应用占用,同一个端口只能被一个服务监听。

3. 办理方法

打开终端(大概iterm)使用kill命令“杀掉”被占用端口对应的服务。

4. 操纵步骤

常规操纵

1. 在终端命令输入: lsof  -i:端口号然后按回车(注意是英文状态下的冒号,如:lsof -i:8080, 将8080更换为你的端口)
  1. lsof -i:8080
复制代码

2. kill -9 PID然后按回车 (如:kill -9 1946,将1946更换为你的PID)
  1. kill -9 1946
复制代码

3. 回车后如果没有任何提示表示运行成功,如果提示"no such process",表示历程已经被终止大概你输入的PID有误。

4. 注意:如第一步运行效果有多个pid就需要多次执行kill -9 PID,相同的PID只需要执行一次就可以了


进阶操纵

如果觉得上面操纵需要两步操纵,当出现多个PID时还需要多次运行命令太贫苦了,可以使用下面的脚本命令直接在终端运行,该脚本会直接一次性kill全部8080对应的历程,把8080更换为你需要处置惩罚的端口即可。
赋值下面的代码更换port,然后将整段代码在终端运行即可:
  1. port=8080;pids=$(lsof -ti :$port);if [ -n "$pids" ];then for pid in $pids;do kill -9 $pid;done;echo "运行成功,端口$port已可用!";else echo "端口$port可用,无需kill";fi
复制代码
下面是完整的脚本(运行需要输入y二次确认),你可以用下面的步骤生存为脚本方法以后调用:

  • 将下面的脚本生存为一个文件,好比 port_kill.sh。
  • 给文件添加执行权限:chmod +x port_kill.sh。
  • 运行脚本并提供要查抄的端口号作为参数,比方:./port_kill.sh 8080。
  1. #!/bin/bash
  2. # 检查参数是否提供
  3. if [ $# -ne 1 ]; then
  4.     echo "用法: $0 <端口>"
  5.     exit 1
  6. fi
  7. port=$1
  8. # 检查指定端口是否被占用
  9. pids=$(lsof -ti :$port)
  10. if [ -n "$pids" ]; then
  11.     echo "端口 $port 已被以下进程占用:"
  12.     echo "$pids"
  13.     read -p "确定要终止这些进程吗?(y/n): " answer
  14.     if [ "$answer" = "y" ]; then
  15.         # 终止占用指定端口的所有进程
  16.         for pid in $pids; do
  17.             kill -9 $pid
  18.             echo "进程 $pid 已终止"
  19.         done
  20.     else
  21.         echo "已取消操作,未终止进程"
  22.         exit 0
  23.     fi
  24. else
  25.     echo "端口 $port 可用"
  26. fi
复制代码
5. 拓展知识

lsof命令

lsof 是一个用于列出系统中打开的文件(包罗网络套接字、管道等)的工具。它的名字是 "list open files" 的缩写。lsof 命令可以用于检察正在被哪些历程使用的文件,以及这些文件的具体信息。
基本用法:
  1. lsof [options]
  2. 常用的参数(options):
  3. -i: 列出网络连接信息。
  4. -u <username>: 列出指定用户打开的文件。
  5. -c <command>: 列出指定命令所打开的文件。
  6. -p <pid>: 列出指定进程ID所打开的文件。
  7. -t: 仅输出进程ID。
  8. -n: 不解析主机名。
  9. -h: 显示帮助信息。
复制代码
lsof 的输出包罗文件形貌符历程ID用户文件范例文件名等信息,可以根据需要进行过滤和分析。通过 lsof 命令,可以帮助用户相识系统中文件的使用情况,进行排查和分析,特别是在处置惩罚雷同文件锁、资源泄露等题目时非常有用。
kill命令


在 macOS(以及其他类 Unix 系统)中,kill 命令用于终止运行中的历程。它发送一个信号给指定的历程,通常是终止它,但也可以用于执行其他操纵,具体取决于发送的信号范例。
基本用法:
  1. kill [options] <PID>
  2. 其中 <PID> 是要终止的进程的进程ID。一些常用的选项包括:
  3. -9 或 SIGKILL: 发送强制终止信号,立即终止进程。
  4. -15 或 SIGTERM: 发送终止信号,请求进程正常退出。
  5. -l: 列出可用的信号名称和编号。
复制代码
默认情况下,如果没有指定信号范例,则会发送 SIGTERM 信号,这通常答应历程进行清理和退出。如果历程没有相应 SIGTERM 信号,可以实验使用 SIGKILL 信号强制终止它。
比方,要终止历程ID为 10086的历程,可以使用以下命令:
  1. kill 10086
复制代码
大概,要强制终止它,可以使用:
  1. kill -9 10086
复制代码
使用 kill 命令需要有足够的权限来终止指定的历程。通常,只有超级用户(root)大概拥有相应权限的用户才气终止其他用户的历程。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表