process.exit / process.exitCode în Node.js

Rulare și linie de comandă Toate versiunile Node.js

Stabilește codul de ieșire al scriptului (0 = succes) sau oprește procesul imediat cu process.exit.

Sintaxă
process.exitCode = cod
process.exit([cod])
process.on("exit", (cod) => { ... })

Ce face process.exit / process.exitCode

Orice program se termină cu un cod numeric: 0 înseamnă succes, orice altă valoare înseamnă eroare. Terminalul, scripturile shell și serverele de CI (GitHub Actions) se uită la acest cod ca să știe dacă pasul a reușit.

process.exitCode = 1 doar notează codul: programul își termină în liniște ce avea de făcut (scrieri în fișiere, mesaje în așteptare), apoi iese cu acel cod. process.exit(1) oprește procesul pe loc; operațiile asincrone neterminate se pierd. De aceea, în scripturi, varianta cu exitCode este cea recomandată.

Evenimentul "exit" rulează chiar înainte de ieșire și primește codul. În el merge doar cod sincron. O eroare neprinsă oprește procesul cu codul 1.

Parametri

Parametru Descriere
cod Număr întreg; implicit 0 sau valoarea din process.exitCode.

Ce returnează

process.exit() nu se mai întoarce: procesul se oprește.

Exemple

Exemplul 1: Cod de ieșire pentru o validare

Scriptul verifică notele și setează exitCode = 1 dacă găsește una invalidă. echo $? afișează în terminal codul ultimei comenzi.

// verifica.mjs
const note = [9, 10, 11, 7];
const invalide = note.filter((n) => n < 1 || n > 10);

if (invalide.length > 0) {
  console.log("Note invalide:", invalide);
  process.exitCode = 1;
} else {
  console.log("Toate notele sunt corecte.");
}

// în terminal:
// node verifica.mjs; echo "cod: $?"

Ieșire în terminal

Note invalide: [ 11 ]
cod: 1

Exemplul 2: Evenimentul exit

Evenimentul rulează după ce s-a terminat restul codului, inclusiv temporizatoarele.

process.on("exit", (cod) => {
  console.log(`La revedere! Cod de ieșire: ${cod}`);
});

setTimeout(() => console.log("Am terminat de procesat comenzile."), 10);
console.log("Pornesc...");

Rezultat

Pornesc...
Am terminat de procesat comenzile.
La revedere! Cod de ieșire: 0

Exemplul 3: process.exit taie ce era în așteptare

Mesajul din setTimeout nu mai apare: procesul se oprește imediat.

setTimeout(() => console.log("Nu ajung să fiu afișat"), 0);
console.log("Opresc acum.");
process.exit(0);

Rezultat

Opresc acum.

Greșeli frecvente

  • Apelezi process.exit() imediat după o scriere asincronă (writeFile, trimiterea unui răspuns): scrierea poate rămâne neterminată. Setează process.exitCode și lasă programul să se termine singur.
  • Pui cod asincron în process.on("exit"): un setTimeout sau o scriere asincronă de acolo nu mai rulează.
  • Ieși cu process.exit(0) după o eroare: pentru CI și shell, pasul a reușit. Folosește un cod diferit de zero.

Comenzi înrudite

  • process.argv: Tabloul cu argumentele din linia de comandă: process.argv.slice(2) dă ce a scris utilizatorul după numele scriptului.
  • child_process.spawn: Pornește un program ca proces copil și citește ieșirea lui pe măsură ce apare (stream), fără shell.
  • node --test (node:test): Rulează testele automate cu testerul inclus în Node.js: test, describe, it, fără Jest sau Mocha.