当父 NodeJS 进程退出,导致子进程退出时,这是如何通信的?

时间:2020-12-31 20:24:49

标签: python node.js windows electron signals

index.js

const childProcess = require("child_process");

childProcess.spawn("python", ["main.py"]);

main.py

import time

while True:
    time.sleep(1)

当使用 node index.js 运行 NodeJS 进程时,它会一直运行,因为它产生的 Python 子进程会一直运行。

当 NodeJS 进程通过命令提示符 x-ing 结束时,Python 进程也会结束,这是我们想要的,但是如何在 Python 代码退出之前运行一些清理代码?

之前的尝试

  • 查看 child_process.spawn 的文档,了解这种终止是如何从父级到子级进行通信的,也许是通过信号。没找到。
  • 在 Python 中使用 signal.signal(signal.SIGTERM, handler)(以及与 signal.SIGINT 一起使用)。没有让处理程序运行(虽然,使用 Ctrl-C 结束 NodeJS 进程而不是关闭窗口确实让 SIGINT 处理程序运行,即使我没有明确地将输入从 NodeJS 进程转发到 Python 子进程)。

最后,虽然这个可重现的示例也有效且简单得多,但我的实际用例涉及 Electron,所以如果它引入了复杂性或解决方案,我想我会提到它。

Windows 10、NodeJS 12.7.0、Python 3.8.3

0 个答案:

没有答案