Per*_* P. 2231
process.exit()
Run Code Online (Sandbox Code Playgroud)
process.exit([代码])
结束指定的过程
code
.如果省略,则退出使用"成功"代码0
.要使用"失败"代码退出:
Run Code Online (Sandbox Code Playgroud)process.exit(1);
执行节点的shell应该将退出代码视为1.
ali*_*ard 361
从官方nodejs.org文档:
process.exit(code)
Run Code Online (Sandbox Code Playgroud)
使用指定的代码结束进程.如果省略,则退出使用"成功"代码0.
要使用"失败"代码退出:
process.exit(1);
Run Code Online (Sandbox Code Playgroud)
Dom*_*nic 334
只是,用音符process.exit([number])
是不推荐的做法.
调用process.exit()将强制进程尽快退出,即使还有尚未完全完成的异步操作,包括对process.stdout和process.stderr的I/O操作.
在大多数情况下,实际上不必显式调用process.exit().如果事件循环中没有待处理的额外工作,Node.js进程将自行退出.process.exitCode属性可以设置为告诉进程在进程正常退出时使用哪个退出代码.
例如,以下示例说明了process.exit()方法的滥用,该方法可能导致打印到stdout的数据被截断和丢失:
Run Code Online (Sandbox Code Playgroud)// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
这是有问题的原因是因为对Node.js中的process.stdout的写入有时是异步的,并且可能发生在Node.js事件循环的多个滴答中.但是,调用process.exit()会强制进程退出,然后才能执行对stdout的其他写入操作.
代码不应直接调用process.exit(),而应设置process.exitCode,并允许进程自然退出,避免为事件循环调度任何其他工作:
Run Code Online (Sandbox Code Playgroud)// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
Moh*_*sen 267
如果你在Unix终端或Windows命令行中想要退出Node REPL,要么......
.exit
并按Enter,或Mik*_*Lin 118
从命令行,.exit
你想要的是:
$ node
> .exit
$
Run Code Online (Sandbox Code Playgroud)
它在REPL文档中有记录.REPL(Read-Eval-Print-Loop)是Node命令行的调用.
从正常程序,使用process.exit([code])
.
teq*_*teq 72
这取决于您愿意退出node.js进程的原因,但无论如何process.exit()
都是最后一个要考虑的选项.文件引用:
重要的是要注意,
process.exit()
即使还有尚未完全完成的异步操作,包括对process.stdout
和的I/O操作,调用也会强制进程尽快退出process.stderr
.在大多数情况下,实际上没有必要
process.exit()
明确调用 .如果事件循环中没有待处理的额外工作,Node.js进程将自行退出.process.exitCode
可以设置该 属性以告诉进程在进程正常退出时使用哪个退出代码.
让我们来说明您可能愿意退出node.js进程的原因以及为什么要避免process.exit()
:
如果脚本已到达其末尾并且节点解释器未退出,则表示某些异步操作仍处于挂起状态.此时强制终止进程是错误的process.exit()
.最好是尝试理解让脚本以预期的方式退出的原因.当你解决这个问题时,你可以使用process.exitCode
将任何结果返回给调用进程.
例如,如果您愿意优雅地关闭快速应用程序.与命令行脚本不同,快速应用程序无限运行,等待新请求.process.exit()
这将是一个糟糕的选择,因为它将中断所有正在管道中的请求.其中一些可能是非幂等的(UPDATE,DELETE).客户端永远不会知道这些请求是否在服务器端完成,这可能是客户端和服务器之间数据不一致的原因.唯一的好解决方案是告诉http服务器停止接受新请求并等待待处理的请求完成server.close()
:
var express = require('express');
var app = express();
var server = app.listen(80);
process.on( 'SIGTERM', function () {
server.close(function () {
console.log("Finished all requests");
});
});
Run Code Online (Sandbox Code Playgroud)
如果它仍然没有退出 - 参见案例1.
throw
错误总是更好,您将获得格式良好的堆栈跟踪和错误消息.上层代码总是可以决定它们是否可以处理error(catch
)或者让它崩溃.另一方面,process.exit(1)
将默默地终止进程,并且没有机会从此恢复.它可能是唯一的"好处" process.exit()
,您可以确定该过程将被终止.
Siv*_*ash 25
REPL(命令行)
按ctrl + c
两次
键入.exit
,然后按Enter
脚本文件
process.exit(code)
Run Code Online (Sandbox Code Playgroud)
当没有更多异步操作挂起时,节点通常以代码0退出.
process.exit(1)
应该用于退出失败代码.这将允许我们推断该节点没有正常关闭并被迫关闭.
还有其他退出代码
3 - 内部JavaScript解析错误(非常罕见)
5 - v8 javascript引擎中的致命错误
9 - 参数无效
有关完整列表,请参阅节点退出代码
Ste*_*uan 12
我有一个我想要的应用程序:
我必须挂钩process.exit(code)
到exit
事件处理程序,否则邮件不会因为调用发送process.exit(code)
直接杀死异步事件.
#!/usr/bin/nodejs
var mailer = require('nodemailer');
var transport = mailer.createTransport();
mail = {
to: 'Dave Bowman',
from: 'HAL 9000',
subject: 'Sorry Dave',
html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.'
}
transport.sendMail(mail);
//process.exit(1);
process.on('exit', function() { process.exit(1); });
Run Code Online (Sandbox Code Playgroud)
MAN*_*ANN 10
正如@Dominic指出的那样,抛出未被捕获的错误是更好的做法,而不是调用process.exit([code]):
process.exitCode = 1;
throw new Error("my module xx condition failed");
退出
let exitCode = 1;
process.exit(exitCode)
Run Code Online (Sandbox Code Playgroud)
有用的退出代码
1 - Catchall for general errors 2 - Misuse of shell builtins (according to Bash documentation) 126 - Command invoked cannot execute 127 - “command not found” 128 - Invalid argument to exit 128+n - Fatal error signal “n” 130 - Script terminated by Control-C 255\* - Exit status out of range
按Ctrl + C
两次或.exit
.
>
(To exit, press ^C again or type .exit)
>
Run Code Online (Sandbox Code Playgroud)
从代码中可以使用process.exit([errorcode])
where [errorcode]
可选的整数(0
默认值表示成功).
如果您正在使用读取评估打印循环(REPL),则可以使用Ctrl+ D或键入.exit
或者,在Windows或Linux上,您可以使用Ctrl+ C,Ctrl+C
在Mac上,命令是Ctrl+ Z,Ctrl+Z
归档时间: |
|
查看次数: |
842443 次 |
最近记录: |