1 痛点
最近在做cocos小游戏,用node.js搭了一个本地websocket服务器
每次修改完服务端代码,都要重启node,而直接重启会报错,说node 服务已经exists,所以要在重启前彻底干掉node服务,每次重启都要查找再kill这显然有点儿小麻烦,能不能用shell替代呢?
2. 查找并干掉node进程操作有两步:
- 查找
指定tcp端口
lsof -i tcp:8085
该命令输出一般如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 4568 luofuzhong 13u IPv6 0x1d9a704fdee709c1 0t0 TCP *:8085 (LISTEN)
//... 可能还有其他进程
- 杀死进程
取之前的PID号,如4568,使用kill -9 杀死即可
kill -9 4568
3. shell
我们shell要做的事情就是找到第一个命令输出的node进程PID,传给第kill命令即可
lsof -i tcp:8085 | awk '$1=="node"{print $2}' | sed -n '1p' | xargs kill -9
解释
- 第一个命令正常输出
- awk命令接收第一个命令输出结果,并截取指定字段,$1表示第一列值==="node"这个字符,print $2 表示格式化输出这行的第二列的值,这样就找到了PID号
- sed 取当前找到的PID号所有行中第一行,因为可能会有多行PID号,PID号在这里都是一样的,取一行的值就可以
- kill命令利用xargs 接受PID号作为参数,即实现;可以将这个这个小脚本放在bash里,给个别名下次一行命令就实现了