如何关闭本地 firebase 模拟器?

How can I shut down the local firebase emulators?

目前我使用以下方法初始化 firebase 模拟器:

$ firebase emulators:start

经过一段时间的处理后,我想停止它。我怎样才能停止模拟器?

  1. 查看是哪个进程占用了端口sudo lsof -i tcp:<port>
  2. 终止进程kill -9 <process id>

如果你不想每次都检查端口,你可以用下面的命令停止

kill -9 (lsof -t -i:5002 -i:5001)

(-i:xxxx 是 firebase.json 中的 运行 模拟器端口。)

而且,我也不想背这么长的命令。 所以我在下面制作了 package.json 脚本。

"scripts": {
   ...
   "stop": "lsof -t -i :5001 -i:5002 | xargs kill -9",
   ...
}

我已经尝试了上面的所有答案,并且 none 做了我所期望的:优雅地结束整个模拟器套件,而无需 ctrl+c,没有端口被占用。这是我的解决方法。

TLDR:lsof -ti :4400 | xargs --no-run-if-empty kill

端口为 4400,因为它是 Emulator Hub 的默认端口。尽管使用此命令,无论您杀死哪个进程,您都将结束模拟器。

其他答案中使用的“-9”标志不会向进程发送 SIGTERM 信号,而是强行杀死它。这会阻止模拟器正常结束。

据此:https://github.com/firebase/firebase-tools/issues/1367 Ctrl+C 杀死模拟器

另一种方法是使用 firebase emulators:exec,根据 CLI 文档,它可以执行以下操作:

start the local Firebase emulators, run a test script, then shut down the emulators

因为我将测试 运行 命令放在 Makefile 中,所以我使用以下命令从 Python firebase_admin SDK 测试 firestore:

firebase emulators:exec "make test" --only firestore

端口的设置和拆除由 firebase 直接处理。

一个跨平台的解决方案是运行:npx kill-port 4000,8080,8085

对于Windows,首先在cmd中输入这个找到使用端口8080的进程的PID。

netstat -a -n -o | find "8080"

接下来,通过以下方式终止该进程:

taskkill /PID <type PID here>

这是我刚刚发现的一些乐趣。当您想关闭模拟器并清除所有端口和进程时,在模拟器终端中双击 CTRL-C(按住 CTRL 并双击 C)运行。

我检查了几次,看看端口是否空闲,它们都是。

只需使用 CTRL-C 一次,所有这些端口仍在使用中。希望它能解决其他人的问题,而不仅仅是我。

编辑:在我看来,问题只会持续到设置模拟器后第一次关闭计算机。我现在可以使用单个 CTRL-C 正确关闭模拟器。

如果你想杀死所有的 firebase 模拟器,你可以通过发出这个命令轻松地做到这一点

$ lsof -t -i:8080 -i:9000 -i:9099 -i:9199 -i:9090 | xargs kill -9

如果你不想每次都输入这么长的命令,我建议你使用 package.json 文件中的脚本

 "scripts": {
   "emulators:start": "firebase emulators:start",
   "emulators:stop": "lsof -t -i:5001 -i:5002 -i:8080 -i:9000 -i:9099 -i:9199 -i:9090 | xargs kill -9"
  }

一个用于启动模拟器,一个用于停止,以防 Ctr+C 没有停止后台进程。

这些是 firebase 文档页面中的默认端口。您还应该检查您的 firebase.json 文件,如果它们不同,请替换上一个命令中的 PORTS。