【问题标题】:How can I kill TCP port 16969 in Bash?如何在 Bash 中终止 TCP 端口 16969?
【发布时间】:2012-04-07 05:11:08
【问题描述】:

我有一个使用 TCP 端口 16969 的应用程序。它有时需要快速重新启动软件内核。但是如果我启动得太快,我就会被锁定

线程“main”java.net.BindException 中的异常:地址已在使用中

所以我想触发我的 Bash 脚本,它可以用 16969 杀死任何正在运行或正在侦听的端口,但我该怎么做呢?

$ lsof -w -n -i tcp:16969 # this gives me a list of 50 lines but how can I kill them all?

【问题讨论】:

    标签: linux bash ubuntu tcp


    【解决方案1】:

    你尝试过使用 tcpkill 吗?

    示例:

    tcpkill -i eth0 port 21
    

    【讨论】:

    • tcpkill 将杀死网络流,但不会杀死绑定到端口的进程
    • 考虑到问题的模糊性,这似乎是一个合理的解决方案。
    • 这比杀死进程要好。当请求太多时,我不想杀死我的网络服务器。
    • 当您希望流程继续进行时,这是完美的解决方案
    【解决方案2】:

    我认为:

    lsof -i tcp:22 | grep LISTEN | awk '{print $2}' | xargs kill
    

    应该做的伎俩。

    要仔细检查它想要运行的命令,然后再让它松动,在 kill 之前添加一个 echo,如下所示:

    lsof -i tcp:22 | grep LISTEN | awk '{print $2}' | xargs echo kill
    

    然后它会列出它通常会杀死的 PID

    【讨论】:

    • @jordanm 不,不是。如果没有grep LISTEN,您也将尝试杀死列标题,即 PID
    • @dmvianna awk '/LISTEN/ { print $2 }'awk 可以做所有grep 可以做的事情。这是多余的。
    【解决方案3】:
    fuser -k 16969/tcp 
    

    可以释放该端口。这是一个有用的命令,可用于关闭端口,无论它是什么。

    【讨论】:

    • 请注意,这将杀死连接到指定端口的进程!
    • fuser 杀死进程,没有最好的方法杀死套接字
    【解决方案4】:

    我经常在 Netbeans 中使用 JBoss 时遇到这个问题...

    我的解决方案:

    在终端类型中:

     sudo netstat -lnp | grep 8080  
    

    然后它显示如下内容:

     tcp6       0      0 :::8080       :::*        LISTEN      1722/java
    

    然后使用:

     kill 1722  //replace 1722 by the PID you found.
    

    希望它会有所帮助!

    【讨论】:

    • 这是centos中的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多