gpt4 book ai didi

Node.js 拦截 process.exit

转载 作者:IT老高 更新时间:2023-10-28 23:20:35 29 4
gpt4 key购买 nike

所以我想在我的 node.js 程序结束时运行一个 shell 命令,并在退出之前等待输出/打印它。我尝试了 process.on('exit',function(){}) 并在其中运行子 exec 命令,但程序在回调之前退出。因此,我在 process.exit 上使用了一个闭包,但我得到了一些奇怪的结果。代码的基础是:

 process.exit = (function(old_exit){
return function(code){
var exec = require('child_process').exec;
var child;
child = exec("my shell command", function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
console.log(stdout);
//I first had this as the concluding line:
old_exit.apply(process,arguments);
//and I also tried
old_exit.apply(process,[]);
//and even (which I know is not in the right scope)
old_exit(code);
//and also
process.exit = old_exit;
process.exit(code);
});
}
}(process.exit));

上述每个结果都恰好执行了我的 shell 命令两次,然后退出。我也尝试在最后不调用任何东西,虽然它保留它以便我的命令只执行一次,但进程挂起而不是最后退出。除非我只是缺少某些东西,否则我觉得我第一次尝试 old_exit.apply(process,arguments); 将是正确的方法,不应该再次调用我自己的代码,它确实.我还尝试了无效的使用过的 promise (它甚至没有因为被多次解决而引发错误),并且我尝试使用 bool 值来判断它是否已设置,但这也不起作用。我最后什至尝试在回调完成后抛出一个错误,但这迫使 process.exit 在错误后再次被调用。有什么想法吗?

最佳答案

到 process.exit 时间,你做任何异步操作都太晚了。我认为您无法绕过异步部分,因为您显然需要执行 shell 命令。您可以监听各种退出信号,执行异步操作,然后在准备好时自己调用 process.exit。请注意,在进程存在之前,您将收到所有信号,因此您需要跟踪状态以确保您的 shell 命令只运行一次。以下将适用于 ctrl-c 信号:

process.on('SIGINT', function() {
console.log('Received Signal');
setTimeout(function() {
console.log('Exit');
process.exit(1);
}, 10000);
});

关于Node.js 拦截 process.exit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594751/

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