吾生有牙 2019-11-30 15:39 采纳率: 0%
浏览 1936

求助,linux进行被kill后端口仍然处于监听状态,一直释放不了该怎么办

昨天同事在更新重启服务时启动不了,我上去看了下日志是端口占用,本来想这很简单阿,杀掉进程不就OK了吗。
于是用netstat查看了以下,结果傻眼了,端口处于监听状态,进程ID却没有,试了lsof也找不到进程ID。问了下同事,他当时是使用kill没有加—9参数杀进程的。
后来网上看到有说用tcpkill可以断开连接释放端口,也尝试了,依然没用。系统是Red Hat 4.8.5-28,下面是具体的操作结果

首先看下正常的端口7711,可以看到进程编号

[root@host1]# netstat -an|grep 7711
tcp        0      0 0.0.0.0:7711            0.0.0.0:*               LISTEN     
[root@host1]# netstat -anp|grep 7711
tcp        0      0 0.0.0.0:7711            0.0.0.0:*               LISTEN      15720/java 

再来看看异常的端口7751,用netstat -anp没有任何结果,netstat -an可以看到端口仍然处于监听状态

[root@host1]# netstat -anp|grep 7751
[root@host1]# netstat -an|grep 7751
tcp        0      0 0.0.0.0:7751            0.0.0.0:*               LISTEN   
#使用lsof查看的结果
[root@host1]# lsof -i:7711
COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
java    15720 root   22u  IPv4 286355217      0t0  TCP *:7711 (LISTEN)
[root@host1]# lsof -i:7751
COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
[root@host]# 
[root@host1]# tcpkill -9 port 7751
tcpkill: listening on eth0 [port 7751]
^C
[root@host1# netstat -an|grep 7751
tcp        0      0 0.0.0.0:7751            0.0.0.0:*               LISTEN     
[root@host1]# 

现在只有想到重启这条路,但是重启的话又比较麻烦。希望哪位知道这个问题的大佬给指点指点,不重启的情况下有没有办法

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 07:06
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可能是因为Linux内核在处理TCP连接的时候会自动关闭这些临时连接,然后释放端口。如果这个过程没有完成,那么可能会出现这种情况。

    如果你想要强制结束一个正在运行的进程(在这个例子中是Java进程),你可以使用kill命令加上SIGKILL信号。但是请注意,这将立即终止进程,而不是仅仅使它进入停止状态。如果你不想杀死进程,而是要让它挂起一段时间,你可能需要使用kill命令加上SIGSTOP信号。

    对于你的问题,你可以尝试以下步骤:

    1. 使用kill命令加上SIGKILL信号来强行结束Java进程。
    2. 然后等待几分钟,让进程挂起。
    3. 最后再次检查端口是否已经被释放。

    这是一个示例脚本,用于在Linux上强制结束一个正在运行的Java进程,并等待其挂起:

    #!/bin/bash
    
    pid=$(pgrep java)
    
    if [[ $pid ]]; then
      kill $pid SIGKILL
      sleep 3m # wait for process to hang up
    else
      echo "Process not found"
    fi
    

    确保替换$pid变量为实际的Java进程ID。

    注意:这个脚本会在后台执行,并且可能需要一些时间才能完成。如果你的任务非常紧急,请考虑使用更安全的方法来解决这个问题。

    评论

报告相同问题?