
项目需要一个脚本,杀掉某个端口指定的进程,这里通过2个范例来讲解下常见的几个命令的用法:grep/awk/sed
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-proxyawk -F"/"** 表示采用**/进行分割字符串awk -F"/" '{ print $n }** 其中的**print $n** 上面也提到,输出的第几列**
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个小范例,应付这些简单的脚本,应该就不成问题了。