用于退出的命令是什么? (即终止Node.js进程)
答案 0 :(得分:2044)
process.exit()
process.exit([代码])
使用指定的
code
结束进程。如果省略,则退出使用“成功”代码0
。以“失败”代码退出:
process.exit(1);
执行节点的shell应该将退出代码视为1。
答案 1 :(得分:351)
答案 2 :(得分:281)
请注意,使用process.exit([number])
是not recommended练习。
调用process.exit()将强制进程尽快退出 即使仍然存在异步操作,也可能 还没有完全完成,包括I / O操作 process.stdout和process.stderr。
在大多数情况下,实际上并不需要打电话 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; }
答案 3 :(得分:253)
如果你在Unix终端或Windows命令行中并且想要退出Node REPL,那么......
.exit
,然后按Enter或答案 4 :(得分:115)
从命令行,.exit
就是您想要的:
$ node
> .exit
$
它记录在REPL docs中。 REPL(Read-Eval-Print-Loop)是Node命令行的调用方式。
从正常程序中,使用process.exit([code])
。
答案 5 :(得分:66)
这取决于您愿意退出node.js流程的原因,但无论如何process.exit()
是要考虑的最后一个选项。来自文档的引用:
重要的是要注意,调用
process.exit()
会强制执行 即使仍然存在,也要尽快退出 尚未完全完成的异步操作挂起, 包括process.stdout
和process.stderr
的I / O操作。在大多数情况下,实际上并不需要打电话 明确地
process.exit()
。 Node.js进程将退出它自己的进程 如果事件循环中没有待处理的额外工作。该 可以设置process.exitCode
属性来告诉进程哪个退出 进程正常退出时使用的代码。
让我们了解您可能愿意退出node.js流程的原因以及您应该避免process.exit()
的原因:
如果脚本已到达终点并且节点解释器没有退出,则表示某些异步操作仍处于未决状态。在此时强制使用process.exit()
终止进程是错误的。最好尝试理解what is holding your script from exiting in expected way。解决此问题后,您可以使用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");
});
});
如果它仍然没有退出 - 参见案例1。
throw
错误总是更好,您将获得格式良好的堆栈跟踪和错误消息。较高级别的代码总是可以决定它们是否可以处理错误(catch
)或让它崩溃进程。另一方面,process.exit(1)
将以静默方式终止进程,并且没有机会从此恢复。它可能是process.exit()
的唯一“好处”,您可以确定该过程将被终止。
答案 6 :(得分:24)
REPL (命令行)
按ctrl + c
两次
输入.exit
并按Enter键
脚本文件
process.exit(code)
当没有更多异步操作待处理时,节点通常以代码0 退出。
process.exit(1)
应该用于退出失败代码。这将允许我们推断该节点没有正常关闭并被迫关闭。
还有其他退出代码,例如
3 - 内部JavaScript解析错误(非常罕见)
5 - v8 javascript引擎中的致命错误
9 - 参数无效
有关完整列表,请参阅its doc entry
答案 7 :(得分: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); });
答案 8 :(得分:9)
正如@Dominic所指出的,throwing an uncaught error是更好的做法而不是调用 process.exit([code]):
process.exitCode = 1;
throw new Error("my module xx condition failed");
答案 9 :(得分:7)
从代码中,您可以使用process.exit([errorcode])
,其中[errorcode]
是可选整数(0
是默认值,表示成功)。
如果您使用的是Read Eval Print Loop (REPL),则可以使用 Ctrl + D ,或输入.exit
或者,在Windows或Linux上,您可以使用 Ctrl + C , Ctrl + C
在Mac上,命令是 Ctrl + Z , Ctrl + Z
答案 10 :(得分:7)
退出
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
答案 11 :(得分:7)
按Ctrl + C
两次
或.exit
。
>
(To exit, press ^C again or type .exit)
>
答案 12 :(得分:3)
我能够通过键入taskkill -F -IM node.exe
直接从Windows 10上的Git Bash shell中获取所有节点进程 - 这会立即终止我计算机上的所有节点进程。我发现我也可以使用taskkill //F //IM node.exe
。不确定为什么-
和//
都在此上下文中工作。希望这有帮助!
答案 13 :(得分:3)
命令行
按两次 CTRL + C
OR
输入.exit
并按Enter键
脚本文件
process.exit(code)
答案 14 :(得分:1)
添加
process.exit(1);
会为你解决问题
答案 15 :(得分:0)
如果您想强制执行循环停止该过程,则可以使用全局变量 process ,它是 EventEmitter 的一个实例。因此,当您调用 process.exit() 时,您实际上会发出 exit 事件,即使没有执行异步操作,该事件也会立即结束所有任务。完成。
process.exit()以退出代码(Integer)作为参数。代码 0 是默认值,这意味着它以“成功”退出。代码 1 表示它退出并显示“失败”。
答案 16 :(得分:0)
由于进程是全局对象,因此不需要导入任何模块。以下函数退出或终止当前节点进程。
process.exit(代码)
process.kill(process.pid)
process.abort()
答案 17 :(得分:0)
如果您使用的是Windows,请转至“任务管理器”,然后转至“进程”,查找一个名为“节点”的进程,然后用鼠标右键单击该进程,然后单击“结束进程”选项。
答案 18 :(得分:0)
import mongosse from 'mongoose'
import dotenv from 'dotenv'
import colors from 'colors'
import users from './data/users.js'
import products from './data/products.js'
import User from './models/userModel.js'
import Product from './models/productModel.js'
import Order from './models/orderModel.js'
import connectDB from './config/db.js'
dotenv.config()
connectDB()
const importData = async()=>{
try{
await Order.deleteMany()
await Product.deleteMany()
await User.deleteMany()
const createdUsers = await User.insertMany(users)
const adiminUser = createdUsers[0]._id
sampleProducts = products.map(product =>{
return {...product, user:adiminUser }
})
await Product.insertMany(sampleProducts)
console.log('Data Imported!'.green.inverse)
process.exit() //success and exit
}catch(error){
consolele.log(`${error}`.red.inverse)
process.exit(1) //error and exit
}
}
因此,如果我没有收到任何错误,则在这里在db和try块中填充一些集合,然后我们以成功消息退出它,因此为此我们使用了process.exit(),而该参数中没有任何内容。 如果出现错误,那么我们需要退出并发送一条不成功的消息,因此我们在像process.exit(1)这样的参数中传递1。
额外:这里的退出是指退出该典型的node js程序。例如,如果此代码位于名为dbOperations.js的文件中,则process.exit将退出,并且不会运行process.exit之后的任何代码
答案 19 :(得分:0)
如果要退出节点js应用程序,则写入
process.exit(1)
代码
答案 20 :(得分:-1)
您可以使用process.exit([code])功能。
如果要退出而不会出现“失败”,请使用代码0
:
process.exit(0);
要以“失败”代码1
退出,可以运行:
process.exit(1);
失败的“失败”代码特定于应用程序。因此,您可以使用自己的约定。
答案 21 :(得分:-1)
打开运行节点应用程序的命令行终端,然后按 Ctrl + C
如果您想从代码中退出节点js应用程序,
process.exit(); // graceful termination
process.exit(1); // non graceful termination