shell脚本根据端口杀死进程(带完整解析)

各位可以将下述内容当为学习Shell脚本,如果只是想要更方便地根据端口杀死进程,可以直接使用该方法(port是端口):

kill -9 `lsof -ti:port`;

在项目开发的时候,我们经常需要根据相对应的端口来杀死进程,而这样的操作最少需要两步:

root@qg:~# netstat -nlp | grep 11120
tcp     0    0    0.0.0.0:11120          0.0.0.0:*         LISTEN      20247/java
root@qg:~# kill -9 20247

一次还好,但是多次操作之后还是会感觉很烦,那么有什么办法可以简便点呢,这里我们使用了shell编程设计了一个根据端口杀死进程的程序。

mkdir ~/bin
cd ~/bin
touch killbyport.sh
vim killbyport.sh

killbyport.sh里面的内容为:

#!/bin/bash

if [ -z $1 ]; then
        echo "you must input a port"
        exit 0
fi

PID=$(netstat -nlp | grep ":$1" | awk '{print $7}' | awk -F '[ / ]' '{print $1}')

if [ $? == 0 ]; then
        echo "process id is:${PID}"
else
        echo "process $1 no exit"
        exit 0
fi

kill -9 ${PID}

if [ $? == 0 ]; then
        echo "kill $1 success"
else
        echo "kill $1 fail"
fi

然后我们将其加入到用户环境中:

cd ~/.bashrc

结尾中加入:

export PATH=$PATH:~/bin

此时我们就可以直接使用指令进行杀死端口操作了

root@qg:~/test# killbyport.sh 11120
process id is:20247
kill 11120 success

如果只是单纯的使用的话到这里就可以结束了,接下来的部分将为大家分析该脚本的含义。

进行shell环境的声明:

#!/bin/bash

判断是否输入自定义参数port:

if [ -z $1 ]; then
        echo "you must input a port"
        exit 0
fi

$1:输入的第一个参数,即是killbyport.sh 11120中的11120

[ -z $1 ]:判断$1是否为空字符,若是返回true

其他的跟上述差不多,重点讲述一下PID的由来:

PID=$(netstat -nlp | grep ":$1" | awk '{print $7}' | awk -F '[ / ]' '{print $1}')

首先进行测试:

root@qg:~/test# echo $(netstat -nlp | grep ":11120")
tcp     0    0    0.0.0.0:11120          0.0.0.0:*         LISTEN      20247/java

这时候我们需要取到20247/java字段,因此利用awk进行字符串的截取:

root@qg:~/test# echo $(netstat -nlp | grep ":11120" | awk '{print $7}')
20247/java

这时我们仅仅需要把20247截取出来即可,利用/进行分割,取第一个字符串:

root@qg:~/test# echo $(netstat -nlp | grep ":11120" | awk '{print $7}' | awk -F '[ / ]' '{print $1}')
20247

大功告成,希望这篇博客能帮助到大家。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值