谷歌云功能不处理sigint

时间:2020-06-22 07:38:21

标签: javascript node.js google-cloud-platform google-cloud-functions

我已经使用Google Cloud功能已有一段时间了。错误处理从来没有任何问题,但是最近,当我在本地主机上停止google cloud功能时,它发出了以下错误。

^CReceived SIGINT
Received SIGINT
^CReceived SIGINT
Received SIGTERM
^CReceived SIGINT

一段时间后,我发现程序仍在执行,一旦执行完成,就会出现以下错误。

Error: Process exited with code 0
    at process.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/web-dev/firestore-scripts/node_modules/@google-cloud/functions-framework/build/src/invoker.js:396:29)
    at process.emit (events.js:310:20)
    at process.EventEmitter.emit (domain.js:482:12)
    at process.exit (internal/process/per_thread.js:166:15)
    at Server.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/web-dev/firestore-scripts/node_modules/@google-cloud/functions-framework/build/src/invoker.js:402:29)
    at Object.onceWrapper (events.js:416:28)
    at Server.emit (events.js:322:22)
    at Server.EventEmitter.emit (domain.js:482:12)
    at emitCloseNT (net.js:1657:8)
    at processTicksAndRejections (internal/process/task_queues.js:83:21)

很明显,我想在按 ctrl + c 时停止程序,但不会。

我添加了一个SIGINT事件侦听器,还添加了一个try-catch来处理错误并将任何错误发送给客户端。它仍然无法正常工作。

目前,我正在手动终止当前不理想的过程。

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

我认为这与本地Cloud Functions实施的Life Cycle有关。

当调用者向Web服务器发送HTTP请求时,框架必须根据开发人员指定的功能签名类型采取解组步骤。然后必须通过传递符合开发人员指定的函数签名类型的适当参数来调用该函数。

当该函数表示已完成执行(即“完成信令”)时,框架必须响应调用者。根据开发人员的功能签名类型,框架可能首先需要将开发人员的功能返回的对象编组为HTTP响应。

我在想的是,当您尝试停止程序或可能尚未关闭与调用者的连接时,Cloud Function仍在运行。

一个疯狂的猜测是,当执行Zack的步骤时,功能会尝试再次连接到Web服务器,但是SIGNINT的优先级很高,从而使程序完全停止。

引起我注意的是,您提到这是最近的行为。我建议直接与GCP support联系以进行更深入的检查。您也可以创建Public Issue Tracker。这可能有助于确定这是否确实与功能的生命周期有关,或者功能是否卡住等。

答案 1 :(得分:2)

是的,这太蠢了。我没有解决方案,但是我的解决方法是:

  • Ctrl + C
  • 从浏览器中访问URL

由于某种原因,它会杀死它。