首页 > 解决方案 > nodejs - 来自连续 execSync 函数的意外行为

问题描述

我在我的 Ubuntu 16 上的 nodejs 中运行了以下内容来处理 nodejs 程序的终止:

process.on('SIGINT', function () {
    process.exit(); // On ctrl + C, exit this process.
});

// catches the exit(). On exit, execute our handler function.
process.on('exit', exitHandler.bind(null, { exit: true }));

async function exitHandler(options, exitCode) {

    try {
        await execSync("docker kill $(docker ps -q -a)");
    } catch (err) {
        errOut(err);
    }
    try {
        await execSync("docker rm $(docker ps -q -a)");
    } catch (err) {
        errOut(err);
    }
    stdOut("\nExiting the process..");
}

问题是如果第一个await execSync优雅地执行,下一个await execSync将不会执行。但奇怪的是,如果第一个execSync崩溃并最终出错,第二个将执行。我希望他们在任何情况下都一个接一个地执行。我不知道如何解决这个问题。

标签: node.jsdocker

解决方案


该命令docker ps -q -a返回所有容器的 id,因此如果有一些未运行的容器,该命令docker kill将返回错误。

要解决此问题,请将第一个 execSync 更改为docker kill $(docker ps -q).


推荐阅读