nodejs前台程序直接control+c就可以干掉,而运行着多个后台的nodejs服务,就不太好杀了。在任务管理器里不论是看"进程"还是看"详细信息",无法看到这些nodejs的脚本和参数,无法简单区分,如果用的是Git-Bash环境,ps也无法区分这些服务对应的是哪些脚本和参数。
那么我们如果想杀掉一个特定脚本参数的服务,怎么操作呢?聪明如你,应该已经从上面的图里看到了对策,是的没错就是pid,进程ID,那么我们怎么知道执行的脚本参数对应那个进程ID呢,这个需要我们在服务里将进程ID取到,并存到一个可被杀后台nodej服务脚本访问的地方。以下是脚本中要添加的部分内容:
...
const { pid } = require('node:process');
...
fs.writeFileSync("pid/s"+sid+".pid"," "+pid);
...
将该服务的进程ID存到文件pid/s[sid].pid中,看后台服务的脚本如下:
#killsvc.sh
echo -n taskkill //f //pid >killsvc1.sh
cat pid/s$1.pid >> killsvc1.sh
./killsvc1.sh
rm killsvc1.sh
以后运行./killsvc.sh [sid] 就可以杀掉那个sid的服务了。