当前位置: 首页>后端>正文

nodejs 关闭ChildProcess nodejs结束运行

用于退出的命令是什么? (即终止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楼

我有一个我想要的应用程序:

  1. 发送电子邮件给用户
  2. 退出并显示错误代码

我不得不将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.stdoutprocess.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

https://www.xamrdz.com/backend/3ea1962010.html

相关文章: