项目需要一个脚本,杀掉某个端口指定的进程,这里通过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-proxy
awk -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个小范例,应付这些简单的脚本,应该就不成问题了。