gpt4 book ai didi

node.js - NodeJS 子进程在 SIGINT 上终止

转载 作者:IT王子 更新时间:2023-10-29 00:43:06 26 4
gpt4 key购买 nike

我正在创建 NodeJS 应用程序,它创建了很多子进程。它们由 spawnexec 启动(基于 lib 实现)。一些示例可能是用于图像处理的 GraphicsMagick (gm) 或用于 OCR 的 Tesseract (node-tesseract)。现在我想优雅地结束我的应用程序,所以我创建了关闭钩子(Hook):

function exitHandler() {
killer.waitForShutdown().then(function(){
logger.logInfo("Exited successfully.");
process.exit();
}).catch(function(err) {
logger.logError(err, "Error during server shutdown.");
process.exit();
});
}

process.on('exit', exitHandler);
process.on('SIGINT', exitHandler);
process.on('SIGTERM', exitHandler);

退出处理本身工作正常,它等待得很好等等,但有一个问题。当时运行的所有“ native ”(gm、tesseract、...)进程也将被终止。异常消息仅包含“命令失败”,然后是失败命令的内容,例如

"Command failed: /bin/sh -c tesseract tempfiles/W1KwFSdz7MKdJQQnUifQFKdfTRDvBF4VkdJgEvxZGITng7JZWcyPYw6imrw8JFVv/ocr_0.png /tmp/node-tesseract-49073e55-0ef6-482d-8e73-1d70161ce91a -l eng -psm 3\nTesseract Open Source OCR Engine v3.03 with Leptonica"

所以至少对我来说,他们没有告诉任何有用的东西。我还在排队执行进程,因此 PC 不会同时被 50 个进程重载。当正在运行的进程被 SIGINT 终止时,排队的新进程会正常启动并成功完成。我只有在收到 SIGINT 时运行的少数人有问题。此行为在 Linux (Debian 8) 和 Windows (W10) 上相同。从我在这里读到的内容来看,人们通常有相反的问题(杀死子进程)。我试图搜索 stdin 是否以某种方式通过管道传输到子进程中,但我找不到它。那么它应该如何工作?有什么技巧可以防止这种行为吗?

最佳答案

发生这种情况的原因是,默认情况下,detached 选项设置为 false。如果 detachedfalse,则信号也将发送到子进程,无论您是否设置了事件监听器。

要阻止这种情况发生,您需要更改 spawn 调用以使用第三个参数以指定 detached;例如:

spawn('ls', ['-l'], { detached: true })

来自Node documentation :

On Windows, setting options.detached to true makes it possible for the child process to continue running after the parent exits. The child will have its own console window. Once enabled for a child process, it cannot be disabled.

On non-Windows platforms, if options.detached is set to true, the child process will be made the leader of a new process group and session. Note that child processes may continue running after the parent exits regardless of whether they are detached or not. See setsid(2) for more information.

关于node.js - NodeJS 子进程在 SIGINT 上终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40785734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com