驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
shell:通过监听的端口号杀掉进程
/  

shell:通过监听的端口号杀掉进程

脚本记录.md

项目需要一个脚本,杀掉某个端口指定的进程,这里通过2个范例来讲解下常见的几个命令的用法:grep/awk/sed

范例1

pid=$(netstat -nlp | grep 11000 | awk '{print $7}' | awk -F"/" '{ print $1 }');#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
    kill  -9  $pid;
fi
​
nohup java -jar  all-4.0.2003.jar > /dev/null 2>&1 &
  • netstat -nlp** 获取进程监控的端口等信息**
  • grep xx** 用于抓取带有**xx的那一行的所有内容
  • awk '{print $n}'** 用于输出第n列的内容(从1开始)。上述输出类似:**5427/docker-proxy
  • awk -F"/"** 表示采用**/进行分割字符串
  • awk -F"/" '{ print $n }** 其中的**print $n** 上面也提到,输出的第几列**

范例2


pId=$(lsof -i:11000 | sed -n '2p' | awk '{print $2}')if [  -n  "$pid"  ];  then
    echo $pId
    kill $pId
fi
  • lsof用于获取对应端口号的进程,不过其输出是这样的
COMMAND  PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
java    2416 root  394u  IPv6 164451255      0t0  TCP *:entextxid (LISTEN)
  • 因为这个输出不带有端口号,所以无法通过grep 端口号获取,而且很明显,所需的内容就在第二行,所以通过sed -n '2p'** 就非常好用了,它表示用户的2行的数据。**
  • 接下来就是通过空格切割字符串,然后获取第n列,通过范例1的讲解,awk可以做到。

总结

通过上面的2个小范例,应付这些简单的脚本,应该就不成问题了。

骐骥一跃,不能十步。驽马十驾,功在不舍。