前言
最近在摸索vue。令我头疼的一件事是,如果以外关闭了启动的服务,就会重新开一个端口,这样很不友好,每次还得重新输入到浏览器上一个新的端口。即使是复制到浏览器的地址栏上,也是很繁琐的。
一遍,一遍,又一遍。
啊啊啊
如下图,第一次启动是3000
无故关闭了,就会重新启动一个新的端口
真的很烦。
今天,我终于受不了啦。
笨人的解决方案
1、先查出来占用端口的PID
zhenghui@192 ~ % lsof -i:3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 17178 zhenghui 24u IPv4 0xc012b2e327127691 0t0 TCP *:hbci (LISTEN) zhenghui@192 ~ %
2、使用kill结束进程
kill -9 17178
重复几十遍你试试。
聪明人的解决方法
1、创建一个脚本,内容如下:
zhenghui@192 ~ % cat ks.sh data=`lsof -i:3000|awk '{print $2}' | sort | uniq -d ` for d in $data do echo $d kill -9 $d done zhenghui@192 ~ %
2、想杀死进程时,直接运行
sh ks.sh
进阶(青铜)
zhenghui@192 ~ % cat ks.sh.bak data=`lsof -i:$1|awk '{print $2}'` echo "共:$data" #用于累加计数,用于跳过第一个标题 count=0 for d in $data do if [ "$count" -gt 0 ];then echo 正在结束:$d kill -9 $d fi #每次累加1 count=$((${count}+1)) done
进阶(王者)
zhenghui@192 ~ % cat ks.sh data=`lsof -i:$1 -t` echo "共:$data" for d in $data do echo 正在结束:$d kill -9 $d done zhenghui@192 ~ %
附
1、lsof命令常用参数
-a : 结果进行“与”运算(而不是“或”)
-l : 在输出显示用户ID而不是用户名
-h : 获得帮助
-t : 仅获取进程ID
-U : 获取UNIX套接口地址
-F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)