【问题标题】:is there any difference between process.exitcode and process.exit() in node?节点中的 process.exitcode 和 process.exit() 有什么区别吗?
【发布时间】:2019-12-10 05:23:49
【问题描述】:

process.exitcode 和 process.exit() 有什么区别? 如果我使用 process.exitode = 1 和 process.exit(1) 这会产生任何差异还是只是一种替代方式?

【问题讨论】:

    标签: node.js process exit


    【解决方案1】:

    process.exitcode = 1 不会做任何相应的事情。小心大写。

    来自docs on process.exitCode

    当进程正常退出或通过 process.exit() 退出而不指定代码时,将作为进程退出代码的数字。

    因此,

    process.exitCode = 1;
    // ...
    process.exit();
    

    等价于

    process.exit(1);
    

    值得注意的是,

    process.exitCode = 1;
    process.exitCode = 2;
    process.exit();
    

    不等于

    process.exit(1);
    process.exit(2);
    

    还有,

    process.exitCode = 1;
    console.log("bye");
    process.exit();
    

    不等于

    process.exit(1);
    console.log("bye");
    

    【讨论】:

    • 这意味着如果我做 process.exitCode = 1,它将与异步任务一起工作,而 process.exit(1) 不工作?
    • 我不知道你所说的“它会起作用”是什么意思。 process.exitCode = 1 不会退出。他们都工作,但他们做的事情不同。
    • 是的,因为process.exitCode = 1 不会退出。它与异步无关。要退出,您需要调用process.exit,或者您需要用完脚本。请再次阅读报价;它没有说明退出。分配给process.exitCode 不会退出。执行process.exitCode = 1时没有退出。
    • 您误解了文档的内容。阅读该引用的上下文,它说最好设置 exitCode 然后让程序自然退出(要么用完要做的事情,要么抛出一个会中断的异常通过剩余的代码)而不是使用process.exit,因为process.exit 是突然的并且不允许事情很好地清理。同样,process.exitCode = 1 不会像 let x = 3 那样退出;这是程序确实结束时的设置步骤 - 无论是自然结束,还是由process.exit 不带参数。
    【解决方案2】:

    是的,有区别。

    • process.exitCode 只设置进程最终退出时将使用的退出代码。它不会告诉进程退出,只告诉进程退出时使用什么代码。

    • process.exit([code]) 将使用给定的退出代码终止进程,或者使用 process.exitCode 的值(如果已设置)或默认退出代码 0(成功)。

    不同之处在于exit 将尽快退出(在调用所有“退出”事件侦听器之后),即使有挂起的异步操作,包括 I/O 操作。这可能会导致令人惊讶的行为!

    如果您不需要尽快退出,或者您的代码有很多异步操作,使用exitCode 并在所有操作完成后让进程优雅退出会更安全。

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2021-07-27
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多