답변:
전역 process
객체의 exit
메소드를 호출하십시오 .
process.exit()
process.exit ([코드])
지정된로 프로세스를 종료합니다
code
. 생략하면 exit는 '성공'코드를 사용합니다0
.'실패'코드로 종료하려면 :
process.exit(1);
노드를 실행 한 쉘은 종료 코드를로 표시해야합니다
1
.
exit
은 전혀 오도하지 않습니다. Node의 작동 방식에 대해 혼란스러워합니다. Node를 서버 자체로 생각하십시오. PHP가 Apache와 같은 웹 서버에있는 것처럼 필요에 따라 실행되지 않습니다. 노드는 웹 서버와 전혀 관련이 없습니다! 유용한 작업을 수행하기위한 멋진 내장 라이브러리가있는 일부 JavaScript의 호스트 일뿐입니다.
mod_php
Apache 로 실행 하거나 사용할 필요가 없습니다 . 노드에서와 마찬가지로 FastCGI와 같이 더 정교하고 표준화 된 접근 방식을 실제로 원하거나 사용하는 경우 PHP와 같이 httpd에서 노드를 다시 구현할 수 있습니다.
process.exit()
되어 바람직하지 에 설명 된대로 아래의이 답변을 .
그냥 참고 사용하는 것으로는 process.exit([number])
것입니다 권장하지 연습.
호출
process.exit()
은 아직 완료되지 않은 비동기 작업이 아직 완료되지 않은 경우에도process.stdout
및에 대한 I / O 작업을 포함하여 프로세스를 최대한 빨리 종료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); }
이것이 문제가되는 이유는
process.stdout
Node.js의 쓰기가 비동기 적이며 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; }
process.exit()
의도 된 것입니다.
공식 nodejs.org 문서에서 :
process.exit(code)
지정된 코드로 프로세스를 종료합니다. 생략하면 exit는 '성공'코드 0을 사용합니다.
'실패'코드로 종료하려면 :
process.exit(1);
code = 0; process.exit(code);
code
입니까?
process.exit()
코드가 0으로 기본 설정되어 있으므로 매개 변수가없는 것입니다.
process.exit(0);
실행하면 node exit_0.js && echo 'success'
"성공"이라고 표시됩니다. exit_1.js를 사용하여 작성 process.exit(1);
하고 실행 node exit_1.js && echo 'success'
하면 프로세스가 0이 아닌 것으로 종료되므로 "성공"으로 표시되지 않습니다 (쉘에 "실패"또는 "비정상 종료"를 나타냄). 또한 $?
실행하면 node exit_1.js
vs 에 다른 값이 표시됩니다 node exit_0.js
(를 수행 node exit_1.js
한 다음 수행 하여 확인할 수 있음 echo $?
).
Unix 터미널 또는 Windows 명령 행에 있고 Node REPL을 종료하려면 다음 중 하나를 수행하십시오.
.exit
하고 Enter를 누르십시오. 또는node
그것은 또한 Windows에서 작동하므로 REPL을 종료하려면 Ctrl + D는 표준 동작입니다.
명령 행에서 .exit
원하는 것이 있습니다.
$ node
> .exit
$
REPL docs에 문서화되어 있습니다. REPL (Read-Eval-Print-Loop)은 노드 명령 행이라고합니다.
일반 프로그램에서을 사용하십시오 process.exit([code])
.
node.js 프로세스를 종료하려는 이유에 따라 다르지만 process.exit()
, 마지막으로 고려해야 할 옵션이 있습니다. 설명서의 인용문 :
그것은주의하는 것이 중요하다 호출
process.exit()
여전히 아직 O의에 운영 I을 /를 포함, 완전히 완료되지 않은 보류중인 비동기 작업이있는 경우에도 가능한 한 빨리으로 출구 프로세스를 강제process.stdout
하고process.stderr
.대부분의 상황에서 실제로
process.exit()
명시 적으로 호출 할 필요는 없습니다 . 이벤트 루프에 보류중인 추가 작업이없는 경우 Node.js 프로세스가 자체적으로 종료됩니다.process.exitCode
속성은 종료 코드가 때 프로세스가 종료 정상적으로 사용하는 과정을 말하도록 설정할 수 있습니다.
node.js 프로세스를 기꺼이 종료 할 수있는 이유와 피해야하는 이유에 대해 살펴 보겠습니다 process.exit()
.
스크립트가 종료되고 노드 인터프리터가 종료되지 않으면 일부 비동기 작업이 여전히 보류 중임을 나타냅니다. process.exit()
이 시점에서 프로세스를 강제 종료하는 것은 잘못 입니다. 스크립트가 예상대로 종료되지 않도록하는 것이 무엇인지 이해 하는 것이 좋습니다 . 이를 해결하면 process.exitCode
호출 프로세스에 결과를 반환하는 데 사용할 수 있습니다 .
예를 들어 Express 앱 을 정상적으로 종료하려는 경우 . 명령 줄 스크립트와 달리 Express 앱은 새로운 요청을 기다리면서 계속 실행됩니다. 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()
일 수 있습니다. 프로세스가 종료 될 것임을 확신 할 수 있습니다.
Process.exit()
대부분의 응용 프로그램에서 큰 과잉으로 보입니다. 나는 PHP의 다이에 상응하는 찾고 있었다 () 함수 ... 더 같은 :throw new Error('die msg')
REPL (명령 줄)
두 번 누르십시오ctrl + c
입력 .exit
하고 Enter를 누르십시오
스크립트 파일
process.exit(code)
더 이상 비동기 작업이 보류되지 않으면 노드는 일반적으로 코드 0 으로 종료됩니다 .
process.exit(1)
실패 코드와 함께 종료하는 데 사용해야합니다. 이렇게하면 노드가 정상적으로 닫히지 않고 강제로 닫 혔음을 알 수 있습니다.
같은 다른 종료 코드가 있습니다
3-내부 JavaScript 구문 분석 오류 (매우 드문 경우)
5-v8 자바 스크립트 엔진의 치명적 오류
9-잘못된 인수
전체 목록은 노드 종료 코드를 참조하십시오.
원하는 응용 프로그램이 있습니다.
이벤트 처리기 에 연결 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); });
process.exitCode
있는 명령 줄 도구 (노드 v4.3.0에서 테스트 됨)에서 나를 위해 일 하기 위해 좋은 시간을 보냈습니다 . 그러나 나는 문서화 된대로 행동 할 수 없었습니다. 이것은 아주 잘와 에지의 경우 수 있었다 commander
-하지만 github.com/tj/commander.js/...가 궁금한데. 다른 사람이 노드 4 에서이 문제를 보았는지 확실하지 않지만 나중에 참조 할 수 있도록 문서화하십시오.
process.exitCode = 1
프로세스가 코드 0으로 종료
@Dominic이 지적했듯이 catch되지 않은 오류를 발생시키는 것이 process.exit ([code]) 를 호출하는 대신 더 나은 방법입니다 .
process.exitCode = 1;
throw new Error("my module xx condition failed");
나가기 위해서
let exitCode = 1;
process.exit(exitCode)
유용한 종료 코드
1-일반적인 오류에 대한 Catchall 2-셸 내장 오용 (Bash 설명서에 따름) 126-호출 한 명령을 실행할 수 없습니다 127-“명령을 찾을 수 없습니다” 128-잘못된 인수가 종료되었습니다 128 + n-치명적 오류 신호 "n" 130-Control-C에 의해 종료 된 스크립트 255 \ *-종료 상태가 범위를 벗어남
코드 에서 선택적 정수인 process.exit([errorcode])
where 를 사용할 수 있습니다 [errorcode]
( 0
성공을 나타내는 기본값 임).
당신이 사용하는 경우 읽기 평가는 루프 (REPL)를 인쇄 , 당신이 사용할 수있는 Ctrl+ D, 또는 유형을.exit
또는 Windows 또는 Linux에서 Ctrl+ C, Ctrl+를 사용할 수 있습니다C
Mac에서 명령은 Ctrl+ Z, Ctrl+Z
node --version
v0.10.18
Ctrl + C
또는을 두 번 누릅니다 .exit
.
>
(To exit, press ^C again or type .exit)
>
입력하여 taskkill -F -IM node.exe
모든 노드 프로세스를 Windows 10의 Git Bash 셸에서 직접 죽게 할 수있었습니다. 그러면 컴퓨터의 모든 노드 프로세스가 한 번에 종료됩니다. 나는 또한 사용할 수 있음을 발견했다 taskkill //F //IM node.exe
. 확실하지 왜 모두 -
와 //
작업 이러한 맥락이다. 도움이 되었기를 바랍니다!
프로세스는 전역 객체이므로 모듈을 가져올 필요가 없습니다. 다음 함수는 현재 노드 프로세스를 종료하거나 종료합니다.
process.exit (코드)
process.kill (process.pid)
process.abort ()
실행 루프가 프로세스를 강제로 멈추게하려면 EventEmitter 의 인스턴스 인 전역 변수 프로세스 를 사용할 수 있습니다 . 따라서 process.exit () 를 호출하면 하면 여전히 비동기 작업이 수행되지 않은 경우에도 모든 작업을 즉시 종료 하는 exit 이벤트가 발생합니다.
process.exit () 는 종료 코드 (정수)를 매개 변수로 사용합니다. 코드 0 이 기본값이며 이는 '성공'으로 종료됨을 의미합니다. 코드 1 은 '실패'로 종료됨을 의미합니다.
Windows의 경우 작업 관리자로 이동 한 다음 프로세스로 이동하여 "노드"라는 프로세스를 찾은 다음 마우스 오른쪽 버튼으로 프로세스를 클릭 한 다음 "프로세스 종료"옵션을 클릭하십시오.
process.exit ([code]) 함수를 사용할 수 있습니다 .
'실패'없이 종료하려면 코드를 사용하십시오 0
.
process.exit(0);
'실패'코드로 끝내 1
려면 다음을 실행할 수 있습니다.
process.exit(1);
실패의 '실패'코드는 애플리케이션에 따라 다릅니다. 그래서 당신은 그것에 대한 당신의 자신의 규칙을 사용할 수 있습니다.
end()
요청 해야 합니다. 그렇지 않으면 그냥 중단됩니다.