用于退出的命令是什么? (即终止Node.js进程)
#1楼
从命令行, .exit
就是你想要的:
$ node
> .exit
$
它在REPL文档中有记录 。 REPL(Read-Eval-Print-Loop)是Node命令行的调用。
从正常程序中,使用process.exit([code]) 。
#2楼
从代码中可以使用process.exit([errorcode])
,其中[errorcode]
是一个可选的整数( 0
是默认值,表示成功)。
如果您使用的是Read Eval Print Loop(REPL) ,则可以使用Ctrl + D或键入.exit
Ctrl + C , Ctrl + C.
Ctrl + Z , Ctrl + Z.
#3楼
我有一个我想要的应用程序:
- 发送电子邮件给用户
- 退出并显示错误代码
我不得不将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); });
#4楼
请注意, 建议不要使用process.exit([number])
。
调用process.exit()将强制进程尽快退出,即使还有尚未完全完成的异步操作,包括对process.stdout和process.stderr的I / O操作。
在大多数情况下,实际上不必显式调用process.exit()。 如果事件循环中没有待处理的额外工作,Node.js进程将自行退出。 process.exitCode属性可以设置为告诉进程在进程正常退出时使用哪个退出代码。
例如,以下示例说明了process.exit()方法的滥用 ,该方法可能导致打印到stdout的数据被截断和丢失:
// 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,并允许进程自然退出,避免为事件循环调度任何其他工作:
// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
#5楼
正如@Dominic指出的那样, 抛出未被捕获的错误是更好的做法,而不是调用process.exit([code]) : process.exitCode = 1; throw new Error("my module xx condition failed");
#6楼
退出
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
#7楼
这取决于您愿意退出node.js进程的原因,但无论如何, process.exit()
是最后要考虑的选项 。 文件引用:
值得注意的是,调用
process.exit()
将强制进程尽快退出,即使仍有尚未完全完成的异步操作,包括对process.stdout
和process.stderr
I / O操作。在大多数情况下,实际上不必显式调用
process.exit()
。 如果事件循环中没有待处理的额外工作,Node.js进程将自行退出。process.exitCode
属性可以设置为告诉进程在进程正常退出时使用哪个退出代码。
让我们来说明您可能愿意退出node.js进程的原因以及为什么要避免使用process.exit()
:
案例1 - 执行完成(命令行脚本)
如果脚本已到达其末尾并且节点解释器未退出,则表示某些异步操作仍处于挂起状态。 在此时强制使用process.exit()
终止process.exit()
是错误的。 最好是尝试理解让脚本以预期的方式退出的原因 。 解决此问题后,您可以使用process.exitCode
将任何结果返回给调用进程。
案例2 - 由于外部信号而终止(SIGINT / SIGTERM /其他)
例如,如果您愿意优雅地关闭快速应用程序。 与命令行脚本不同,快速应用程序可以无限运行,等待新请求。 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");
});
});
如果它仍然没有退出 - 参见案例1。
案例3 - 内部错误
throw
错误总是更好,你会得到一个格式良好的堆栈跟踪和错误消息。 较高级别的代码总是可以决定它们是否可以处理错误( catch
)或让它崩溃进程。 另一方面, process.exit(1)
将以静默方式终止进程,并且没有机会从此恢复。 它可能是process.exit()
的唯一“好处”,您可以确定该进程将被终止。
#8楼
REPL (命令行)
- 按
ctrl + c
两次 - 输入
.exit
并按Enter键
脚本文件
process.exit(code)
当没有更多异步操作挂起时,节点通常以代码0退出。
应该使用process.exit(1)
以失败代码退出。这将允许我们推断该节点没有正常关闭并被迫关闭。
还有其他退出代码
3 - 内部JavaScript解析错误(非常罕见)
5 - v8 javascript引擎中的致命错误
9 - 参数无效
有关完整列表,请参阅节点退出代码
#9楼
如果要退出节点js应用程序,则写入
process.exit(1)
在你的代码中
#10楼
通过输入taskkill -F -IM node.exe
我能够直接从Windows 10上的Git Bash shell中获取所有节点进程 - 这会立即终止我计算机上的所有节点进程。 我发现我也可以使用taskkill //F //IM node.exe
。 不确定为什么两者-
和//
在这种情况下工作。 希望这可以帮助!
#11楼
按Ctrl + C
两次或.exit
。
>
(To exit, press ^C again or type .exit)
>
#12楼
您可以使用process.exit([code])函数。
如果要在没有“失败”的情况下退出,则使用代码0
:
process.exit(0);
要以“失败”代码1
退出,您可以运行:
process.exit(1);
失败的“失败”代码特定于应用程序。 所以你可以使用自己的约定。
#13楼
从官方nodejs.org文档:
process.exit(code)
使用指定的代码结束进程。 如果省略,则退出使用“成功”代码0。
要使用“失败”代码退出:
process.exit(1);
#14楼
调用全局process对象的exit方法:
process.exit()
来自文档:
process.exit([代码])
使用指定的
code
结束进程。 如果省略,则退出使用“成功”代码0
。要使用“失败”代码退出:
process.exit(1);
执行节点的shell应该将退出代码视为1。
#15楼
打开运行节点应用程序的命令行终端,然后按Ctrl + C.
如果要从代码中退出节点js应用程序,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
#16楼
节点js中的出口以两种方式完成:
- 显式调用process.exit() 。
- 或者,如果nodejs事件循环完成了所有任务,那么就没有什么可做的了。 然后,节点应用程序将自动退出。
这个怎么运作?
如果要强制执行循环来停止进程,则可以使用全局变量进程 ,它是EventEmitter的一个实例。 因此,当您调用process.exit()时 ,实际上会发出exit事件,即使仍然没有完成异步操作,也会立即结束所有任务。
process.exit()将退出代码(Integer)作为参数。 代码0是默认值,这意味着它以“成功”退出。 虽然代码1意味着它以“失败”退出。
#17楼
由于流程是全局对象,因此您无需导入任何模块。 以下函数退出或终止当前节点进程。
process.exit(代码)
process.kill(process.pid)
process.abort()
#18楼
如果你在Unix终端或Windows命令行中想要退出Node REPL,要么......
- Ctrl + C两次,或
- 输入
.exit
并按Enter,或 - Ctrl + D