etc./StackOverFlow

Node.js에서 종료하는 방법

청렴결백한 만능 재주꾼 2021. 12. 7. 00:50
반응형

질문자 :700 Software


종료하는 데 사용되는 명령은 무엇입니까? (즉, Node.js 프로세스 종료)



process 개체의 exit 메서드를 호출합니다.

 process.exit()

문서에서:

process.exit([exitcode])

code 프로세스를 종료합니다. 생략하면 exit는 '성공' 코드 0 합니다.

'실패' 코드로 종료하려면:

 process.exit(1);

노드를 실행한 쉘은 종료 코드를 1 로 봐야 합니다.


Community Wiki

사용하는 것을 그냥 참고 process.exit([number]) 되고 권장되지 연습.

process.exit() 호출 process.stdoutprocess.stderr I/O 작업을 포함하여 아직 완전히 완료되지 않은 보류 중인 비동기 작업이 있더라도 최대한 빨리 프로세스를 종료합니다.

process.exit() 명시적으로 호출할 필요는 없습니다. 이벤트 루프에 보류 중인 추가 작업이 없으면 Node.js 프로세스가 자체적으로 종료됩니다. process.exitCode 속성은 프로세스가 정상적으로 종료될 때 사용할 종료 코드를 프로세스에 알리도록 설정할 수 있습니다.

예를 들어, 다음 예제 stdout 에 인쇄된 데이터가 잘리고 손실될 수 있는 process.exit() 메서드의 오용을 보여줍니다.

 // This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }

이것이 문제가 되는 이유는 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; }

Dominic

공식 nodejs.org 문서에서:

 process.exit(code)

지정된 코드로 프로세스를 종료합니다. 생략하면 종료는 '성공' 코드 0을 사용합니다.

'실패' 코드로 종료하려면:

 process.exit(1);

alienhard

Unix 터미널 또는 Windows 명령줄에 있고 Node REPL을 종료하려면 다음 중 하나를 수행하십시오.

  • Ctrl + C를 두 번 누르거나
  • .exit 를 입력하고 Enter 키를 누르거나
  • 줄 시작 부분에서 Ctrl + D 누르기(Unix만 해당)

Mohsen

명령줄에서 .exit 는 원하는 것입니다.

 $ node > .exit $

REPL 문서에 문서화되어 있습니다. REPL(Read-Eval-Print-Loop)은 노드 명령줄이라고 합니다.

일반 프로그램에서 process.exit([code]) .


Mike M. Lin

node.js 프로세스를 종료하려는 이유에 따라 다르지만 어떤 경우에도 process.exit()고려해야 할 마지막 옵션 입니다. 문서 인용문:

process.stdoutprocess.stderr I/O 작업을 포함하여 아직 완전히 완료되지 않은 비동기 작업이 보류 중인 경우에도 process.exit() 를 호출하면 프로세스가 최대한 빨리 종료됩니다. .

process.exit() 명시적으로 호출할 필요는 없습니다. 이벤트 루프에 보류 중인 추가 작업이 없으면 Node.js 프로세스가 자체적으로 종료됩니다. process.exitCode 속성은 프로세스가 정상적으로 종료될 때 사용할 종료 코드를 프로세스에 알리도록 설정할 수 있습니다.

node.js 프로세스를 종료하려는 가능한 이유와 process.exit() 피해야 하는 이유를 살펴보겠습니다.

사례 1 - 실행 완료(명령줄 스크립트)

스크립트가 끝에 도달하고 노드 인터프리터가 종료되지 않으면 일부 비동기 작업이 아직 보류 중임을 나타냅니다. 이 시점에서 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() 의 유일한 "이점"일 수 있습니다. 프로세스가 종료될 것임을 확신할 수 있습니다.


teq

REPL (명령줄)

  • ctrl + c 두 번 누릅니다.

  • .exit 를 입력하고 Enter 키를 누릅니다.

스크립트 파일

 process.exit(code)

더 이상 비동기 작업이 보류되지 않으면 노드가 일반적으로 코드 0으로 종료됩니다.

process.exit(1) 은 실패 코드와 함께 종료하는 데 사용해야 합니다. 이를 통해 노드가 정상적으로 닫히지 않고 강제로 닫혔음을 추론할 수 있습니다.

다음과 같은 다른 종료 코드가 있습니다.

3 - 내부 JavaScript 구문 분석 오류(매우 드물다)

5 - v8 자바스크립트 엔진의 치명적인 오류

9 - 잘못된 인수

전체 목록은 노드 종료 코드를 참조하십시오.


Siva Prakash

내가 원하는 응용 프로그램이 있습니다.

  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); });

Stephen Quan

@Dominic이 지적했듯이 잡히지 않은 오류를 던지는 것이 process.exit([code]) 를 호출하는 대신 더 나은 방법입니다.
process.exitCode = 1; throw new Error("my module xx condition failed");


MANN

Ctrl + C 두 번 누르 .exit .

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

HeadAndTail

나가기 위해서

 let exitCode = 1; process.exit(exitCode)

유용한 종료 코드

1 - 일반 오류에 대한 catchall
2 - 쉘 내장의 오용(Bash 문서에 따름)
126 - 호출된 명령을 실행할 수 없습니다.
127 - "명령을 찾을 수 없습니다"
128 - 종료할 잘못된 인수
128+n - 치명적인 오류 신호 "n"
130 - Control-C에 의해 종료된 스크립트
255\* - 종료 상태가 범위를 벗어남

Denis Lisitskiy

process.exit([errorcode]) 사용할 수 있습니다. 여기서 [errorcode] 는 선택적 정수입니다( 0 은 성공을 나타내는 기본값).

REPL(Read Eval Print Loop) 을 사용하는 경우 Ctrl + D 를 사용하거나 .exit

또는 Windows 또는 Linux에서 Ctrl + C , Ctrl + C를 사용할 수 있습니다.

Mac에서 명령은 Ctrl + Z , Ctrl + Z입니다.


zzzzBov

taskkill -F -IM node.exe 를 입력하여 Windows 10의 Git Bash 셸에서 모든 노드 프로세스를 직접 종료할 수 있었습니다. 이렇게 하면 내 컴퓨터의 모든 노드 프로세스가 한 번에 종료됩니다. taskkill //F //IM node.exe 사용할 수도 있음을 발견했습니다. 이 컨텍스트에서 -// 모두 작동하는 이유는 확실하지 않습니다. 도움이 되었기를 바랍니다!


Alison Stuart

노드 응용 프로그램이 실행 중인 명령줄 터미널을 열고 Ctrl + C를 누릅니다.

코드에서 노드 js 애플리케이션을 종료하려면

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

Shekar Mania

프로세스는 전역 객체이므로 모듈을 가져올 필요가 없습니다. 다음 함수는 현재 노드 프로세스를 종료하거나 종료합니다.

process.exit(코드)

process.kill(process.pid)

프로세스.중단()


sumit_suthar

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을 전달합니다.

추가: 여기서 종료한다는 것은 일반적인 노드 js 프로그램을 종료하는 것을 의미합니다. 예를 들어 이 코드가 dbOperations.js라는 파일에 있으면 process.exit가 종료되고 process.exit 다음에 오는 코드는 실행되지 않습니다.


Rmcr714

첨가

 process.exit(1);

당신을 위해 트릭을 할 것입니다


amir yeganeh

노드 js 응용 프로그램을 종료하려면 다음을 작성하십시오.

 process.exit(1)

당신의 코드에서


Ajay Mudaliyar

노드 js의 종료는 두 가지 방법으로 수행됩니다.

  • 명시적으로 process.exit() 호출.
  • 또는 모든 작업에 대해 nodejs 이벤트 루프가 완료되고 더 이상 할 일이 없는 경우입니다. 그러면 노드 응용 프로그램이 자동으로 종료됩니다.

어떻게 작동합니까?

실행 루프가 프로세스를 중지하도록 하려면 EventEmitter 의 인스턴스인 전역 변수 process 를 사용할 수 있습니다. 따라서 process.exit() 를 호출하면 아직 완료되지 않은 비동기 작업이 있더라도 모든 작업을 즉시 종료 하는 종료 이벤트를 실제로 내보냅니다.

process.exit() 는 종료 코드(정수)를 매개변수로 사용합니다. 코드 0 은 기본값이며 이는 '성공'으로 종료됨을 의미합니다. 코드 1 은 '실패'로 종료됨을 의미합니다.


majid jiji

Windows를 사용하는 경우 작업 관리자로 이동한 다음 프로세스로 이동하여 "노드"라는 프로세스를 찾은 다음 마우스 오른쪽 버튼으로 클릭한 다음 "프로세스 끝내기" 옵션을 클릭합니다.


Albos Hajdari

process.exit([code]) 함수를 사용할 수 있습니다.

'실패' 없이 종료하려면 코드 0 을 사용합니다.

 process.exit(0);

'실패' 코드 1 종료하려면 다음을 실행할 수 있습니다.

 process.exit(1);

실패의 '실패' 코드는 애플리케이션에 따라 다릅니다. 따라서 고유한 규칙을 사용할 수 있습니다.


Oleksii Trekhleb

출처 : http:www.stackoverflow.com/questions/5266152/how-to-exit-in-node-js

반응형