各位可以将下述内容当为学习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
大功告成,希望这篇博客能帮助到大家。