Chame o método process
do objeto global exit
:
process.exit()
Dos documentos:
process.exit ([código])
Finaliza o processo com o especificado code
. Se omitido, exit usa o código 'success' 0
.
Para sair com um código de 'falha':
process.exit(1);
O shell que executou o nó deve ver o código de saída como 1
.
end()
solicitá-la. Caso contrário, ele simplesmente travará.exit
não é nada enganoso. Você está confuso sobre como o Node funciona. Pense no Node como o próprio servidor. Não é apenas acionado conforme necessário, como o PHP está dentro de um servidor web como o Apache. O Node nem precisa ter nada a ver com servidores da Web! É apenas um host para JavaScript, com algumas bacanas bibliotecas internas para fazer coisas úteis.mod_php
ou usar o Apache. Você pode reimplementar um httpd no PHP como o nó, se realmente desejar ou usar uma abordagem mais sã / padronizada como o FastCGI, assim como você pode no nó.process.exit()
é recomendado , conforme descrito nesta resposta abaixo .Apenas uma observação de que o uso não
process.exit([number])
é uma prática recomendada .fonte
process.exit()
se destina.Na documentação oficial do nodejs.org :
Finaliza o processo com o código especificado. Se omitido, exit usa o código 'success' 0.
Para sair com um código de 'falha':
fonte
code = 0; process.exit(code);
code
?process.exit()
com nenhum parâmetro como padrões de código para 0process.exit(0);
e executá-node exit_0.js && echo 'success'
lo, ele dirá "sucesso". Se você criar exit_1.js comprocess.exit(1);
e executar,node exit_1.js && echo 'success'
ele não dirá "sucesso", pois seu processo saiu com um valor diferente de zero (o que indica uma "falha" ou "saída anormal" no shell). Além disso, você verá valores diferentes$?
se executarnode exit_1.js
vsnode exit_0.js
(você pode verificar fazendonode exit_1.js
e depois fazendoecho $?
).Se você estiver em um terminal Unix ou linha de comando do Windows e quiser sair do Node REPL, ...
.exit
e pressione Enter oufonte
node
REPL, Ctrl + D para sair é um comportamento padrão, portanto também funciona no Windows.Na linha de comando,
.exit
é o que você deseja:Está documentado nos documentos do REPL . REPL (Read-Eval-Print-Loop) é como a linha de comando do Nó é chamada.
Em um programa normal, use
process.exit([code])
.fonte
Depende do motivo pelo qual você deseja sair do processo node.js, mas, de qualquer forma,
process.exit()
é a última opção a considerar . Uma citação da documentação:Vamos cobrir os possíveis motivos pelos quais você pode sair do processo node.js. e por que deve evitar
process.exit()
:Caso 1 - Execução concluída (script de linha de comando)
Se o script chegou ao fim e o interpretador de nó não sai, isso indica que algumas operações assíncronas ainda estão pendentes. É errado forçar o encerramento do processo
process.exit()
neste momento. É melhor tentar entender o que impede seu script de sair da maneira esperada . E quando você resolver isso, poderá usarprocess.exitCode
para retornar qualquer resultado ao processo de chamada.Caso 2 - Terminação devido a sinal externo (SIGINT / SIGTERM / outro)
Por exemplo, se você deseja encerrar normalmente um aplicativo expresso . Diferentemente do script da linha de comando, o aplicativo expresso continua sendo executado infinitamente, aguardando novas solicitações.
process.exit()
será uma opção ruim aqui porque interromperá todas as solicitações que estão no pipeline. E alguns deles podem ser não-idempotentes (UPDATE, DELETE). O cliente nunca saberá se essas solicitações foram concluídas ou não no servidor e pode ser o motivo da inconsistência dos dados entre o cliente e o servidor. A única boa solução é dizer ao servidor http para parar de aceitar novos pedidos e aguardar pelos pedidos pendentes para concluirserver.close()
:Se ele ainda não sair - consulte o Caso 1.
Caso 3 - Erro interno
É sempre melhor para
throw
um erro, você receberá um rastreamento de pilha bem formatado e uma mensagem de erro. Níveis superiores de código sempre podem decidir se podem lidar com error (catch
) ou deixar o processo travar. Por outro lado,process.exit(1)
encerrará o processo silenciosamente e não haverá chance de se recuperar disso. Pode ser o único "benefício" deprocess.exit()
, você pode ter certeza de que o processo será encerrado.fonte
Process.exit()
parece um grande exagero para a maioria dos aplicativos. Eu estava procurando por um equivalente a morrer de php function () ... mais como:throw new Error('die msg')
REPL (linha de comando)
Pressione
ctrl + c
duas vezesDigite
.exit
e pressione enterArquivo de script
O nó normalmente sai com o código 0 quando não há mais operações assíncronas pendentes.
process.exit(1)
deve ser usado para sair com um código de falha. Isso permitirá inferir que o nó não foi fechado normalmente e foi forçado a fechar.Existem outros códigos de saída como
3 - Erro interno de análise de JavaScript (muito, muito raro)
5 - Erro fatal no mecanismo javascript v8
9 - Argumento inválido
Para obter uma lista completa, consulte os códigos de saída do nó
fonte
Eu tenho um aplicativo que eu queria:
Eu tive que conectar
process.exit(code)
a umexit
manipulador de eventos ou o email não será enviado, pois a chamadaprocess.exit(code)
mata diretamente eventos assíncronos.fonte
process.exitCode
trabalhar para mim em uma ferramenta de linha de comando que estou construindo (testada no Node v4.3.0). Mas não consegui que ele se comportasse como documentado. Isso poderia muito bem ter sido um caso delicadocommander
- embora github.com/tj/commander.js/… me faça pensar. Não tenho certeza se alguém lá fora viu esse problema com o nó 4, mas documentando apenas para referência futura.process.exitCode = 1
, o processo será encerrado com código 0.Como o @Dominic apontou, lançar um erro não capturado é uma prática melhor, em vez de chamar process.exit ([code]) :
process.exitCode = 1; throw new Error("my module xx condition failed");
fonte
Sair
Códigos de saída úteis
fonte
No código, você pode usar
process.exit([errorcode])
where[errorcode]
é um número inteiro opcional (0
é o padrão para indicar sucesso).Se você estiver usando o Read Eval Print Loop (REPL) , poderá usar Ctrl+ Dou digitar
.exit
Como alternativa, no Windows ou Linux, você pode usar Ctrl+ C, Ctrl+C
No Mac, o comando é Ctrl+ Z, Ctrl+Z
fonte
node --version
v0.10.18
Pressione
Ctrl + C
duas vezes ou.exit
.fonte
Consegui que todos os processos do meu nó morressem diretamente do shell do Git Bash no Windows 10 digitando
taskkill -F -IM node.exe
- isso encerra todos os processos do nó no meu computador de uma só vez. Eu descobri que eu também poderia usartaskkill //F //IM node.exe
. Não sei por que ambos-
e//
funcionam nesse contexto. Espero que isto ajude!fonte
Como processo é objeto global, você não precisa importar nenhum módulo. A função a seguir sai ou mata o processo atual do nó.
fonte
Abra o terminal da linha de comandos em que o aplicativo do nó está em execução e pressione Ctrl + C
se você deseja sair de um aplicativo js do nó a partir do código,
fonte
Se você deseja sair do aplicativo node js, escreva
no seu código
fonte
A saída no nó js é feita de duas maneiras:
Como funciona?
Se você deseja forçar o loop de execução a interromper o processo, você pode usar o processo de variável global , que é uma instância do EventEmitter . Então, quando você chama process.exit (), na verdade, emite a saída evento que encerra todas as tarefas imediatamente, mesmo se ainda não houver operações assíncronas.
process.exit () usa um código de saída (Inteiro) como parâmetro. O código 0 é o padrão e isso significa que ele sai com um 'sucesso'. Enquanto o código 1 significa que ele sai com uma 'falha'.
fonte
Se você estiver no Windows, vá para o Gerenciador de tarefas, depois para Processos, procure um processo chamado "nó", clique nele com o botão direito do mouse e, em seguida, clique na opção "Finalizar processo".
fonte
Você pode usar a função process.exit ([code]) .
Se você deseja sair sem uma 'falha', use o código
0
:Para sair com um código de 'falha',
1
você pode executar:O código de 'falha' da falha é específico do aplicativo. Então você pode usar suas próprias convenções para isso.
fonte