shell 小试牛刀

1 痛点

最近在做cocos小游戏,用node.js搭了一个本地websocket服务器
每次修改完服务端代码,都要重启node,而直接重启会报错,说node 服务已经exists,所以要在重启前彻底干掉node服务,每次重启都要查找再kill这显然有点儿小麻烦,能不能用shell替代呢?

2. 查找并干掉node进程操作有两步:
  1. 查找
    指定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)
//... 可能还有其他进程
  1. 杀死进程
    取之前的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 

解释

  1. 第一个命令正常输出
  2. awk命令接收第一个命令输出结果,并截取指定字段,$1表示第一列值==="node"这个字符,print $2 表示格式化输出这行的第二列的值,这样就找到了PID号
  3. sed 取当前找到的PID号所有行中第一行,因为可能会有多行PID号,PID号在这里都是一样的,取一行的值就可以
  4. kill命令利用xargs 接受PID号作为参数,即实现;可以将这个这个小脚本放在bash里,给个别名下次一行命令就实现了

你可能感兴趣的:(shell 小试牛刀)