【问题标题】:How to shutdown Firebase Emulator properly on Windows 10如何在 Windows 10 上正确关闭 Firebase 模拟器
【发布时间】:2021-04-11 15:14:49
【问题描述】:

在我的 vscode powershell 终端中运行firebase emulator:start 时,会弹出一些 java.exe 窗口。一切都很好。

当我使用 ctrl+c 命令关闭 firebase 模拟器时,终端中有日志表明一切都应该正常关闭。这是^C之后的日志:

i  emulators: Received SIGINT (Ctrl-C) for the first time. Starting a clean shutdown.
i  emulators: Please wait for a clean shutdown or send the SIGINT (Ctrl-C) signal again to stop right now.
i  Automatically exporting data using --export-on-exit "./data" please wait for the export to finish...
Terminate batch job (Y/N)? i  Found running emulator hub for project une-petite-partie at http://localhost:4400
i  Deleting directory C:\Users\schar\Documents\Programming\Projects\Card Game\data\firestore_export
i  Exporting data to: C:\Users\schar\Documents\Programming\Projects\Card Game\data
i  emulators: Received export request. Exporting data to C:\Users\schar\Documents\Programming\Projects\Card Game\data.
+  emulators: Export complete.
+  Export complete
i  emulators: Shutting down emulators.
i  ui: Stopping Emulator UI
!  Emulator UI has exited upon receiving signal: SIGINT
i  functions: Stopping Functions Emulator
i  hosting: Stopping Hosting Emulator
i  database: Stopping Database Emulator
!  Database Emulator has exited upon receiving signal: SIGINT
i  firestore: Stopping Firestore Emulator
!  Firestore Emulator has exited upon receiving signal: SIGINT
i  pubsub: Stopping Pub/Sub Emulator
!  Pub/Sub Emulator has exited upon receiving signal: SIGINT
i  hub: Stopping emulator hub
i  logging: Stopping Logging Emulator

那里有一个 (Y/N) 提示,所以如果我输入 Y 或 N,那么终端就会回到常规的 powershell 待机状态。

实际上,java.exe 窗口保持打开状态。此时,如果我再次运行firebase emulator:start,我会收到一条错误消息,指出正在使用模拟器的端口。如果我手动关闭 java.exe 窗口并再次运行模拟器,则一切正常。

我使用的是 Windows 10、powershell 和 VS 代码。我不是在寻找清除端口的技巧,因为我可以简单地关闭 java.exe 窗口。我想知道如何在powershell中一举关闭所有这些。有这样的事吗?这是我应该报告的问题吗?

【问题讨论】:

    标签: firebase firebase-tools


    【解决方案1】:

    我也有类似的问题。我找到了两种方法来解决这个问题。

    方法一:

    1. 使用以下命令查找端口和进程 ID

      netstat -a -o -n

    2. 使用下面提到的命令杀死该进程

      taskkill /F /PID PROCESS_ID

    其中 PROCESS_ID 是我们从第 1 步获得的进程 ID

    1. 再次启动模拟器

      firebase emulators:start

    方法二:

    使用以下命令杀死所有 Java 进程。

    taskkill /f /im java.exe
    

    【讨论】:

    • 在 CLI 中关闭工具时如何自动执行此操作?
    • 在 Windows 中,您可以编写一个批处理脚本来自动执行此操作。并将该批处理脚本放在 PATH 中。之后,您编写的批处理脚本将作为命令提供。而且您不需要一次又一次地运行这些命令。只需运行您使用批处理脚本创建的自定义命令。
    • 在 Linux 中,您可以编写一个 bash 脚本来执行相同的操作,并使用 chmod +x <filename> 命令使该 bash 脚本可执行。将此文件放在 PATH 变量或目录中,例如 /bin/usr/bin,此脚本将作为命令提供。通过这种方式,您可以在 CLI 中将其自动化。
    【解决方案2】:

    我就是这样做的。

    1. 在 VSCode 终端中按 CTRL + C。
    2. 手动关闭 Java 窗口
    3. 在任务的 VSCode 终端窗口中按回垃圾桶图标。

    从那个状态,我可以再次启动 Firebase Emulator 任务就好了。

    firebase emulators:start
    

    也许有更好的方法,但在困惑了自己多年之后,我很高兴我找到了至少可行的方法。 在您完成几次之后,它会变得足够快,可以在您需要时随时完成。

    希望对某人有所帮助。 :)

    【讨论】:

      【解决方案3】:

      该 java.exe 窗口适用于使用端口 8085 的 Google Pub/Sub 模拟器。手动关闭此窗口以终止进程并关闭端口。

      另一种选择是在 firebase.json 配置文件中为 Pub/Sub 指定不同的端口。

       {
          // ...
          "emulators": {
            "pubsub": {
              "host": "HOST",
              "port": "PORT"
            }
          }
        }
      

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 1970-01-01
        • 2020-10-22
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多