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"): unsetTimeoutsau 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.