根据监听端口查找并kill进程
#!/bin/sh
if [ $# -ne 1 ]; then
echo "port# parameter is required."
exit
fi
APPPID=`netstat -anp|grep ":$1 "|grep LISTEN|head -n 1|awk '{print $7}'|cut -d/ -f1`
if [ $APPPID ]; then
echo "Shutdown $1 process:$APPPID"
#kill -9 $APPPID
else
echo "Process $1 NOT found."
fi
解释:
-ne是数字比较运算符 表示不等于,类似的还有 -gt是大于的意思;-lt是小于;-eq是等于;-ne是不等于;-ge是大于等于;le是小于等于
$# 表示命令行参数的个数
if … then fi 是 IF判断的用法
netstat -anp 显示所有网络连接状态,包含对应的进程信息
grep “:$1” 表示匹配包含了参数1(监听端口)的行,前面有冒号,后面有空格,避免部分匹配,如仅匹配80,则 80,8000都会找到,而匹配”:80 “这样就进匹配了监听80端口的行
grep LISTEN 匹配包含LISTEN的行,即监听状态
head -n 1 表示只取第一行
awk ‘{print $7}’表示只取第七个域
cut -d/ -f1表示截取按/作为分割符后的第一个域,-d表示自定义非tab和空格作为分隔符, -c表示字符个数,-c和-f后可跟上数字表示具体取第几个,也可以 1,5-7这样的格式表示取第1,5,6,7个。
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1250/php-fpm: maste
tcp 0 0 127.0.0.1:18089 0.0.0.0:* LISTEN 17773/sshd: root@no
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1254/redis-server *
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2417/nginx: master
tcp 0 0 0.0.0.0:6033 0.0.0.0:* LISTEN 2417/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6189/sshd
tcp 0 0 127.0.0.1:8088 0.0.0.0:* LISTEN 17773/sshd: root@no
tcp 0 0 127.0.0.1:19001 0.0.0.0:* LISTEN 17773/sshd: root@no
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2106/master