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

2024-06-04 4699阅读

1. 场景还原

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

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

2. 错误原因

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

3. 解决方法

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

4. 操作步骤

常规操作

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

lsof -i:8080

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

2. kill -9 PID然后按回车 (如:kill -9 1946,将1946替换为你的PID)

kill -9 1946

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

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

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

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

进阶操作

如果觉得上面操作需要两步操作,当出现多个PID时还需要多次运行命令太麻烦了,可以使用下面的脚本命令直接在终端运行,该脚本会直接一次性kill所有8080对应的进程,把8080替换为你需要处理的端口即可。

赋值下面的代码替换port,然后将整段代码在终端运行即可:

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二次确认),你可以用下面的步骤保存为脚本方法以后调用:

  1. 将下面的脚本保存为一个文件,比如 port_kill.sh。
  2. 给文件添加执行权限:chmod +x port_kill.sh。
  3. 运行脚本并提供要检查的端口号作为参数,例如:./port_kill.sh 8080。
#!/bin/bash
# 检查参数是否提供
if [ $# -ne 1 ]; then
    echo "用法: 

5. 拓展知识

" exit 1 fi port= # 检查指定端口是否被占用 pids=$(lsof -ti :$port) if [ -n "$pids" ]; then echo "端口 $port 已被以下进程占用:" echo "$pids" read -p "确定要终止这些进程吗?(y/n): " answer if [ "$answer" = "y" ]; then # 终止占用指定端口的所有进程 for pid in $pids; do kill -9 $pid echo "进程 $pid 已终止" done else echo "已取消操作,未终止进程" exit 0 fi else echo "端口 $port 可用" fi

lsof命令

lsof [options]
常用的参数(options):
-i: 列出网络连接信息。
-u : 列出指定用户打开的文件。
-c : 列出指定命令所打开的文件。
-p : 列出指定进程ID所打开的文件。
-t: 仅输出进程ID。
-n: 不解析主机名。
-h: 显示帮助信息。

lsof 是一个用于列出系统中打开的文件(包括网络套接字、管道等)的工具。它的名字是 "list open files" 的缩写。lsof 命令可以用于查看正在被哪些进程使用的文件,以及这些文件的详细信息。

基本用法:

kill命令

lsof 的输出包括文件描述符、进程ID、用户、文件类型、文件名等信息,可以根据需要进行过滤和分析。通过 lsof 命令,可以帮助用户了解系统中文件的使用情况,进行排查和分析,特别是在处理类似文件锁、资源泄露等问题时非常有用。

kill [options] 
其中  是要终止的进程的进程ID。一些常用的选项包括:
-9 或 SIGKILL: 发送强制终止信号,立即终止进程。
-15 或 SIGTERM: 发送终止信号,请求进程正常退出。
-l: 列出可用的信号名称和编号。

在 macOS(以及其他类 Unix 系统)中,kill 命令用于终止运行中的进程。它发送一个信号给指定的进程,通常是终止它,但也可以用于执行其他操作,具体取决于发送的信号类型。

基本用法:

kill 10086

默认情况下,如果没有指定信号类型,则会发送 SIGTERM 信号,这通常允许进程进行清理和退出。如果进程没有响应 SIGTERM 信号,可以尝试使用 SIGKILL 信号强制终止它。

例如,要终止进程ID为 10086的进程,可以使用以下命令:

kill -9 10086

或者,要强制终止它,可以使用:

使用 kill 命令需要有足够的权限来终止指定的进程。通常,只有超级用户(root)或者拥有相应权限的用户才能终止其他用户的进程。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]