Qual é o comando usado para sair? (ou seja, encerre o processo Node.js.)
Qual é o comando usado para sair? (ou seja, encerre o processo Node.js.)
Respostas:
Chame o método process
do objeto global exit
:
process.exit()
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
.
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ãoprocess.exit([number])
é uma prática recomendada .
A chamada
process.exit()
forçará o processo a sair o mais rápido possível, mesmo se ainda houver operações assíncronas pendentes que ainda não foram totalmente concluídas, incluindo operações de E / S paraprocess.stdout
eprocess.stderr
.Na maioria das situações, não é realmente necessário chamar
process.exit()
explicitamente. O processo Node.js será encerrado por si próprio se não houver trabalho adicional pendente no loop de eventos. Aprocess.exitCode
propriedade pode ser configurada para informar ao processo qual código de saída usar quando o processo sair normalmente.Por exemplo, o exemplo a seguir ilustra um uso indevido do
process.exit()
método que pode levar a que os dados impressosstdout
sejam truncados e perdidos:// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
A razão pela qual isso é problemático é porque as gravações
process.stdout
no Node.js às vezes são assíncronas e podem ocorrer em vários ticks do loop de eventos do Node.js. A chamadaprocess.exit()
, no entanto, força o processo a sair antes que essas gravações adicionaisstdout
possam ser executadas.Em vez de chamar
process.exit()
diretamente, o código deve definirprocess.exitCode
e permitir que o processo saia naturalmente, evitando agendar qualquer trabalho adicional para o loop de eventos:// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
process.exit()
se destina.
Na documentação oficial do nodejs.org :
process.exit(code)
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':
process.exit(1);
code = 0; process.exit(code);
code
?
process.exit()
com nenhum parâmetro como padrões de código para 0
process.exit(0);
e executá- node exit_0.js && echo 'success'
lo, ele dirá "sucesso". Se você criar exit_1.js com process.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 executar node exit_1.js
vs node exit_0.js
(você pode verificar fazendo node exit_1.js
e depois fazendo echo $?
).
Se você estiver em um terminal Unix ou linha de comando do Windows e quiser sair do Node REPL, ...
.exit
e pressione Enter ounode
REPL, Ctrl + D para sair é um comportamento padrão, portanto também funciona no Windows.
Na linha de comando, .exit
é o que você deseja:
$ node
> .exit
$
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])
.
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:
É importante observar que a chamada
process.exit()
forçará o processo a sair o mais rápido possível, mesmo se ainda houver operações assíncronas pendentes que ainda não foram totalmente concluídas, incluindo operações de E / S paraprocess.stdout
eprocess.stderr
.Na maioria das situações, não é realmente necessário chamar
process.exit()
explicitamente. O processo Node.js será encerrado por si próprio se não houver trabalho adicional pendente no loop de eventos. Aprocess.exitCode
propriedade pode ser configurada para informar ao processo qual código de saída usar quando o processo sair normalmente.
Vamos cobrir os possíveis motivos pelos quais você pode sair do processo node.js. e por que deve evitar process.exit()
:
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á usar process.exitCode
para retornar qualquer resultado ao processo de chamada.
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 concluir 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");
});
});
Se ele ainda não sair - consulte o Caso 1.
É 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" de process.exit()
, você pode ter certeza de que o processo será encerrado.
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 vezes
Digite .exit
e pressione enter
Arquivo de script
process.exit(code)
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ó
Eu tenho um aplicativo que eu queria:
Eu tive que conectar process.exit(code)
a um exit
manipulador de eventos ou o email não será enviado, pois a chamada process.exit(code)
mata diretamente eventos assíncronos.
#!/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
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");
Sair
let exitCode = 1;
process.exit(exitCode)
Códigos de saída úteis
1 - Catchall para erros gerais 2 - Uso indevido dos componentes internos do shell (de acordo com a documentação do Bash) 126 - O comando invocado não pode ser executado 127 - “comando não encontrado” 128 - Argumento inválido para sair 128 + n - Sinal de erro fatal "n" 130 - Script finalizado por Control-C 255 \ * - Status de saída fora do intervalo
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
node --version
v0.10.18
Pressione Ctrl + C
duas vezes ou .exit
.
>
(To exit, press ^C again or type .exit)
>
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 usar taskkill //F //IM node.exe
. Não sei por que ambos -
e //
funcionam nesse contexto. Espero que isto ajude!
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ó.
process.exit (código)
process.kill (process.pid)
process.abort ()
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,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
Se você deseja sair do aplicativo node js, escreva
process.exit(1)
no seu código
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'.
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".
Você pode usar a função process.exit ([code]) .
Se você deseja sair sem uma 'falha', use o código 0
:
process.exit(0);
Para sair com um código de 'falha', 1
você pode executar:
process.exit(1);
O código de 'falha' da falha é específico do aplicativo. Então você pode usar suas próprias convenções para isso.
end()
solicitá-la. Caso contrário, ele simplesmente travará.