按 Ctrl + C 两次 要么 .exit 。
Ctrl + C
.exit
> (To exit, press ^C again or type .exit) >
这取决于你愿意退出node.js进程的原因,但无论如何 process.exit() 是个 的 最后一个选择考虑 强> 。文件引用:
process.exit()
重要的是要注意呼叫 process.exit() 将迫使 即使仍然存在,也要尽快退出 尚未完全完成的异步操作挂起, 包括I / O操作 process.stdout 和 process.stderr 。 在大多数情况下,实际上不需要打电话 process.exit() 明确。 Node.js进程将自行退出 如果事件循环中没有待处理的额外工作。该 process.exitCode 可以设置属性来告诉进程哪个退出 进程正常退出时使用的代码。
重要的是要注意呼叫 process.exit() 将迫使 即使仍然存在,也要尽快退出 尚未完全完成的异步操作挂起, 包括I / O操作 process.stdout 和 process.stderr 。
process.stdout
process.stderr
在大多数情况下,实际上不需要打电话 process.exit() 明确。 Node.js进程将自行退出 如果事件循环中没有待处理的额外工作。该 process.exitCode 可以设置属性来告诉进程哪个退出 进程正常退出时使用的代码。
process.exitCode
让我们介绍一下您可能愿意退出node.js进程以及为什么要避免的原因 process.exit() :
如果脚本已到达其末尾并且节点解释器未退出,则表示某些异步操作仍处于挂起状态。强制终止进程是错误的 process.exit() 在此刻。试着理解它会更好 是什么让你的脚本以预期的方式退出 。当你解决这个问题,你可以使用 process.exitCode 将任何结果返回给调用进程。
例如,如果你愿意优雅地关闭一个 的 表达 强> 应用程序。与命令行脚本不同,快速应用程序无限运行,等待新请求。 process.exit() 这将是一个糟糕的选择,因为它将中断所有正在管道中的请求。其中一些可能是非幂等的(UPDATE,DELETE)。客户端永远不会知道这些请求是否在服务器端完成,这可能是客户端和服务器之间数据不一致的原因。唯一的好办法是告诉http服务器停止接受新请求并等待待处理的请求完成 server.close() :
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"); }); });
如果它仍然没有退出 - 参见案例1。
它总是更好 throw 错误,您将获得格式良好的堆栈跟踪和错误消息。上层代码总能决定它们是否可以处理错误( catch )或让它崩溃的过程。另一方面, process.exit(1) 将以静默方式终止进程,并且没有机会从此恢复。这可能是唯一的好处 process.exit() ,您可以确定该流程将被终止。
throw
catch
process.exit(1)
通过键入,我能够直接从Windows 10上的Git Bash shell中获取所有节点进程 taskkill -F -IM node.exe - 这会立即终止我计算机上的所有节点进程。我发现我也可以使用 taskkill //F //IM node.exe 。不知道为什么两者 - 和 // 在这种背景下工作。希望这可以帮助!
taskkill -F -IM node.exe
taskkill //F //IM node.exe
-
//
我有一个我想要的应用程序:
我不得不勾手 process.exit(code) 到了 exit 事件处理程序,否则自调用后将不会发送邮件 process.exit(code) 直接杀死异步事件。
process.exit(code)
exit
#!/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); });
正如@Dominic指出的那样, 抛出一个未被捕获的错误 更好的做法而不是打电话 process.exit([代码]) : process.exitCode = 1; throw new Error("my module xx condition failed");
process.exitCode = 1; throw new Error("my module xx condition failed");
如果要退出节点js应用程序,则写入
在你的代码中
如果你在Unix终端或Windows命令行中想要退出Node REPL,要么......
退出
let exitCode = 1; process.exit(exitCode)
有用的退出代码
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
来自官方 nodejs.org 文档:
使用指定的代码结束进程。如果省略,则退出使用“成功”代码0。
要使用“失败”代码退出:
process.exit(1);
从命令行, .exit 是你想要的:
$ node > .exit $
它记录在 REPL文档 。 REPL(Read-Eval-Print-Loop)是Node命令行的调用。
从正常程序,使用 process.exit([code]) 。
process.exit([code])
从您可以使用的代码 process.exit([errorcode]) 哪里 [errorcode] 是一个可选的整数( 0 是表示成功的默认值)。
process.exit([errorcode])
[errorcode]
0
如果你正在使用 读取Eval打印循环(REPL) , 您可以使用 按Ctrl + d 或者输入 .exit
或者,您可以在Windows或Linux上使用 按Ctrl + C , 按Ctrl + C
在Mac上命令是 按Ctrl + ž , 按Ctrl + ž
的 命令行 强>
按 的 CTRL + C. 强> 两次
要么
类型 .exit 然后按Enter键
的 脚本文件 强>
你可以用 process.exit([代码]) 功能。
如果要在没有“失败”的情况下退出,则使用代码 0 :
process.exit(0);
以“失败”代码退出 1 你可以跑:
1
失败的“失败”代码特定于应用程序。所以你可以使用自己的约定。
的 REPL 强> (命令行)
按 ctrl + c 的 两次 强>
ctrl + c
节点通常退出 的 代码0 强> 当没有更多的异步操作挂起时。
process.exit(1) 应该用于退出失败代码。这将允许我们推断该节点没有正常关闭并被迫关闭。
还有其他退出代码
3 - 内部JavaScript解析错误(非常罕见)
5 - v8 javascript引擎中的致命错误
9 - 参数无效
完整列表请参阅 节点退出代码