How to exit in Node.js

node.js

node.js Problem Overview


What is the command that is used to exit? (i.e terminate the Node.js process)

node.js Solutions


Solution 1 - node.js

Call the global process object's exit method:

process.exit()

From the docs:

> ## process.exit([exitcode]) > Ends the process with the specified code. If omitted, exit with a 'success' code 0. > > To exit with a 'failure' code: > > process.exit(1); > > The shell that executed node should see the exit code as 1.

Solution 2 - node.js

Just a note that using process.exit([number]) is not recommended practice.

> Calling process.exit() will force the process to exit as quickly as > possible even if there are still asynchronous operations pending that > have not yet completed fully, including I/O operations to > process.stdout and process.stderr. > > In most situations, it is not actually necessary to call > process.exit() explicitly. The Node.js process will exit on its own if > there is no additional work pending in the event loop. The > process.exitCode property can be set to tell the process which exit > code to use when the process exits gracefully. > > For instance, the following example illustrates a misuse of the > process.exit() method that could lead to data printed to stdout being > truncated and lost: > > // This is an example of what not to do: > if (someConditionNotMet()) { > printUsageToStdout(); > process.exit(1); > } > > The reason this is > problematic is because writes to process.stdout in Node.js are > sometimes asynchronous and may occur over multiple ticks of the > Node.js event loop. Calling process.exit(), however, forces the > process to exit before those additional writes to stdout can be > performed. > > Rather than calling process.exit() directly, the code should set the > process.exitCode and allow the process to exit naturally by avoiding > scheduling any additional work for the event loop: > > // How to properly set the exit code while letting > // the process exit gracefully. > if (someConditionNotMet()) { > printUsageToStdout();
> process.exitCode = 1; > }

Solution 3 - node.js

From the official nodejs.org documentation:

process.exit(code)

Ends the process with the specified code. If omitted, exit uses the 'success' code 0.

To exit with a 'failure' code:

process.exit(1);

Solution 4 - node.js

If you're in a Unix terminal or Windows command line and want to exit the Node REPL, either...

  • Press Ctrl + C twice, or
  • type .exit and press Enter, or
  • press Ctrl + D at the start of a line (Unix only)

Solution 5 - node.js

From the command line, .exit is what you want:

$ node
> .exit
$

It's documented in the REPL docs. REPL (Read-Eval-Print-Loop) is what the Node command line is called.

From a normal program, use process.exit([code]).

Solution 6 - node.js

It depends on the reason why you're willing to exit node.js process, but in any case process.exit() is the last option to consider. A quote from documentation:

> It is important to note that calling process.exit() will force the > process to exit as quickly as possible even if there are still > asynchronous operations pending that have not yet completed fully, > including I/O operations to process.stdout and process.stderr. > > In most situations, it is not actually necessary to call > process.exit() explicitly. The Node.js process will exit on it's own > if there is no additional work pending in the event loop. The > process.exitCode property can be set to tell the process which exit > code to use when the process exits gracefully.

Let’s cover possible reasons why you might be willing to exit node.js process and why you should avoid process.exit():

Case 1 - Execution complete (command line script)

If script has reached its end and node interpreter doesn't exit, it indicates that some async operations are still pending. It’s wrong to force process termination with process.exit() at this point. It’s better to try to understand what is holding your script from exiting in expected way. And when you settle this, you can use process.exitCode to return any result to calling process.

Case 2 - Termination because of external signal (SIGINT/SIGTERM/other)

For example, if you’re willing to gracefully shut down an express app. Unlike command line script, express app keeps running infinitely, waiting for new requests. process.exit() will be a bad option here because it’s going to interrupt all requests which are in pipeline. And some of them might be non-idempotent (UPDATE, DELETE). Client will never know if those requests are completed or not on server side and it might be the reason of data inconsistency between client and server. The only good solution is to tell http server to stop accepting new requests and wait for pending ones to finish with 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");
   });
});

If it still doesn't exit - see Case 1.

Case 3 - Internal error

It's always better to throw an error, you’ll get a nicely formatted stack trace and error message. Upper levels of code can always decide if they can handle error (catch) or let it crash the process. On the other side, process.exit(1) will terminate process silently and there will be no chance to recover from this. It might be the only “benefit” of process.exit(), you can be sure that process will be terminated.

Solution 7 - node.js

REPL(Command Line)

  • Press ctrl + c twice

  • Type .exit and press enter

Script File

process.exit(code)

Node normally exits with code 0 when no more async operations are pending.

process.exit(1) should be used to exit with a failure code.This will allow us to infer that node didn't close gracefully and was forced to close.

There are other exit codes like

3 - Internal JavaScript Parse Error ( very very rare)

5 - Fatal error in v8 javascript engine

9 - Invalid argument

For full list see node exit codes

Solution 8 - node.js

I have an application which I wanted to:

  1. Send an email to the user
  2. Exit with an error code

I had to hook process.exit(code) to an exit event handler, or else the mail will not be sent since calling process.exit(code) directly kills asynchronous events.

#!/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); });

Solution 9 - node.js

Press Ctrl + C twice or .exit .

> 
(To exit, press ^C again or type .exit)
> 

Solution 10 - node.js

As @Dominic pointed out, throwing an uncaught error is better practice instead of calling process.exit([code]):
process.exitCode = 1; throw new Error("my module xx condition failed");

Solution 11 - node.js

To exit

let exitCode = 1;
process.exit(exitCode)

Useful exit codes

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

Solution 12 - node.js

From code you can use process.exit([errorcode]) where [errorcode] is an optional integer (0 is the default to indicate success).

If you're using the Read Eval Print Loop (REPL), you can use Ctrl + D, or type .exit

Alternatively, on Windows or Linux you can use Ctrl + C, Ctrl + C

On Mac the command is Ctrl + Z, Ctrl + Z

Solution 13 - node.js

adding

process.exit(1);

will do the trick for you

Solution 14 - node.js

I was able to get all my node processes to die directly from the Git Bash shell on Windows 10 by typing taskkill -F -IM node.exe - this ends all the node processes on my computer at once. I found I could also use taskkill //F //IM node.exe. Not sure why both - and // work in this context. Hope this helps!

Solution 15 - node.js

Open the command line terminal where node application is running and press Ctrl + C

if you want to exit a node js application from code,

process.exit(); // graceful termination 
process.exit(1); // non graceful termination 

Solution 16 - node.js

As process is global object, you don't need to import any module. The following function exits or kills the current node process.

> process.exit(code) > > > process.kill(process.pid) > > > process.abort()

Solution 17 - node.js

if you want to exit from node js application then write

process.exit(1)

in your code

Solution 18 - node.js

The exit in node js is done in two ways:

  • Calling process.exit() explicitly.
  • Or, if nodejs event loop is done with all tasks, and there is nothing left to do. Then, the node application will automatically exit.
How it works?

If you want to force the execution loop to stop the process, yo can use the global variable process which is an instance of EventEmitter. So when you call process.exit() you actually emit the exit event that ends all tasks immediately even if there still are asynchronous operations not been done.

process.exit() takes an exit code (Integer) as a parameter. The code 0 is the default and this means it exit with a 'success'. While the code 1 means it exit with a 'failure'.

Solution 19 - node.js

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

}

}

so here im populating some collections in a db and in the try block if i dont get any errors then we exit it with a success message , so for that we use process.exit() with nothing in the parameter. If theres an error then we need to exit with an unsuccessfull message so we pass 1 in the parameter like this , process.exit(1).

extra: Here by exiting we mean exiting that typical node js program. eg if this code was in a file called dbOperations.js then the process.exit will exit and wont run any code that follows after process.exit

Solution 20 - node.js

ctrl+C to terminate present process
ctrl+C twice is to exit REPL shell
ctrl+c to exit from REPL SHELL

Solution 21 - node.js

You may use process.exit([code]) function.

If you want to exit without a 'failure', you use code 0:

process.exit(0);

To exit with a 'failure' code 1 you may run:

process.exit(1);

The 'failure' code of the failure is specific to the application. So you may use your own conventions for it.

Solution 22 - node.js

If you're in Windows, go to Task Manager, then go to Processes, look for a process called "node", then click on it with the right button of your mouse and then click the "End Process" option.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Question700 SoftwareView Question on Stackoverflow
Solution 1 - node.jsPero P.View Answer on Stackoverflow
Solution 2 - node.jsDominicView Answer on Stackoverflow
Solution 3 - node.jsalienhardView Answer on Stackoverflow
Solution 4 - node.jsMohsenView Answer on Stackoverflow
Solution 5 - node.jsMike M. LinView Answer on Stackoverflow
Solution 6 - node.jsteqView Answer on Stackoverflow
Solution 7 - node.jsSiva PrakashView Answer on Stackoverflow
Solution 8 - node.jsStephen QuanView Answer on Stackoverflow
Solution 9 - node.jsHeadAndTailView Answer on Stackoverflow
Solution 10 - node.jsMANNView Answer on Stackoverflow
Solution 11 - node.jsDenis LisitskiyView Answer on Stackoverflow
Solution 12 - node.jszzzzBovView Answer on Stackoverflow
Solution 13 - node.jsamir yeganehView Answer on Stackoverflow
Solution 14 - node.jsAlison StuartView Answer on Stackoverflow
Solution 15 - node.jsShekar ManiaView Answer on Stackoverflow
Solution 16 - node.jssumit_sutharView Answer on Stackoverflow
Solution 17 - node.jsAjay MudaliyarView Answer on Stackoverflow
Solution 18 - node.jsmajid jijiView Answer on Stackoverflow
Solution 19 - node.jsRmcr714View Answer on Stackoverflow
Solution 20 - node.jsSelvarajView Answer on Stackoverflow
Solution 21 - node.jsOleksii TrekhlebView Answer on Stackoverflow
Solution 22 - node.jsAlbos HajdariView Answer on Stackoverflow