linux 求一个脚本

如果lsof -i:9090 查询时候 NAME 包含"CLOSE_WAIT" 字符串 就杀死这个进程 kill -9 $pid,比如这里就是kill -9 10391 当然这里查询的时候可能是多个CLOSE_WAIT 列表结构

root@center1:~# lsof -i:9090
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 10391 root    6u  IPv4 8396118      0t0  TCP localhost:58667->localhost:9090 (CLOSE_WAIT)

如果 查询的时候 只包含

COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    19828 root   61u  IPv6 8482915      0t0  TCP *:9090 (LISTEN)

就不启动sh 脚本

如果查询 lsof -i:9090 是空
重新启动一个脚本 sh ./test.sh

主要这里的 NAME 字符串排除不会写,求解

阅读 1.6k
2 个回答
#!/bin/bash

flag="False"
status=$(lsof -i:9090|grep 'CLOSE_WAIT')
[[ "$status"  == "" ]] && echo 'No Close wait' || flag="True"

if [[ "$flag" == "True" ]];then
    port=$(lsof -i:9090|grep 'CLOSE_WAIT'|awk '{print $2}')
    for i in $port
    do
        kill -9 $(i)
    done
fi

代码属于盲写,已经好久不碰这个了,另外也没有你这个环境。
自行测试不负责任哈

可以试试:

lsof -i:9090 | grep CLOSE_WAIT | awk '{print $2}' | xargs kill -9

希望能帮助到你。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题