【问题标题】:How to find processes based on port and kill them all? [duplicate]如何根据端口查找进程并将其全部杀死? [复制]
【发布时间】:2011-06-29 22:50:29
【问题描述】:

根据端口号查找进程并将其全部杀死。

ps -efl | grep PORT_NUMBER | kill -9 process_found_previously

如何补完最后一栏?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    ps -efl | grep PORT_NUMBER 的问题在于,PORT_NUMBER 也可能与ps 输出中的其他列匹配(日期、时间、pid,...)。如果由 root 运行,可能会导致杀戮!

    我会这样做:

    PORT_NUMBER=1234
    lsof -i tcp:${PORT_NUMBER} | awk 'NR!=1 {print $2}' | xargs kill 
    

    命令分解

    • (lsof -i tcp:${PORT_NUMBER}) -- 列出所有正在侦听该 tcp 端口的进程
    • (awk 'NR!=1 {print $2}') -- 忽略第一行,打印每行的第二列
    • (xargs kill) -- 将结果作为参数传递给kill。可能有几个。

    【讨论】:

    • Fuser(下)更简单
    • 这很棒。现在有一个可爱的小别名:killport() { lsof -i tcp:$1 | awk 'NR!=1 {print $2}' | xargs kill } 通过端口杀掉现在只是一个写作的例子,例如:killport 3984
    • 看看下面 DanS 的回答 (stackoverflow.com/a/12295745/67824)。如果您使用完全用于此目的的 -it 选项,则可以不使用 awk: -t 指定 lsof 应仅生成带有进程标识符且没有标题的简洁输出 - 例如,以便输出可以被管道杀死(1)。。不用说,这将是一种更好、更可靠的方法。
    • 谁能提供一个我们可以在涉及多个端口时使用的特技,例如当 nginx 在多个端口上运行 100 个进程时。谢谢。
    • 只是一个补充:A=1234; B=4567; lsof -i tcp:${A} -i tcp:${B} -t | xargs kill
    【解决方案2】:

    1.) lsof -w -n -i tcp:8080

    2.) kill -9 processId

    【讨论】:

    • 这里说了很多次了,不要用kill -9,试试kill或者用kill -15 SIGTERM 什么,如果不行,最后用kill -9强制。跨度>
    【解决方案3】:
    kill $( lsof -i:6000 -t )
    

    或者如果您需要权限:

    sudo kill $( sudo lsof -i:6000 -t )
    

    【讨论】:

    • 这在大多数情况下都有效,但似乎存在多个进程可以在同一个端口上侦听的边缘情况,上面的方法将失败:stackoverflow.com/questions/1694144/…。
    • 我让 nginx 在同一个端口上运行多个进程。
    • (+1) 那里有很好的答案。我想知道如何在它之前添加一个测试条件。我的意思是,我想首先检查端口是否实际被进程使用。因此,脚本将类似于:test <check if the port 6000 is being used> && kill $( lsof -i:6000 -t )。任何建议都会有所帮助。
    【解决方案4】:

    建议使用 fuser 命令:

    fuser -k -TERM -n tcp ${PORT_NUMBER}
    

    【讨论】:

    • 这其实是最好的答案。当您可以简单地使用现有实用程序时,为什么还要麻烦管道命令?
    • 这个 fuser 命令在 Mac OS X 中不起作用,但 Shawn 的 lsof 命令可以 :)
    • 我的实际命令是:fuser -k -TERM ${PORT}/tcp 请参阅下面的@Cryptopat response
    【解决方案5】:
    sudo fuser -k 8080/tcp
    

    一个容易记住的。

    此语法可能比问题的日期更新!

    【讨论】:

      【解决方案6】:
      ... | awk '{ print $4 }' | xargs kill -9
      

      请在运行前使用“echo”而不是“kill”进行测试

      【讨论】:

      【解决方案7】:

      杀死所有侦听特定端口的进程,例如8864端口

      kill -9 $ \`lsof -i:8864 -t\`
      

      用你想要的端口替换 8864。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 2016-05-20
        • 2019-08-14
        • 2021-07-24
        • 2012-02-28
        相关资源
        最近更新 更多