Perbincangan ringkas tentang cara mendapatkan kod keluar program dalam NodeJS

青灯夜游
Lepaskan: 2021-09-29 09:39:15
ke hadapan
1756 orang telah melayarinya

Bagaimana untuk mendapatkan kod keluar program NodeJS? Artikel berikut akan memperkenalkan kepada anda kaedah mendapatkan kod keluar program Node.js dan penghitungan kod keluar saya harap ia akan membantu anda!

Perbincangan ringkas tentang cara mendapatkan kod keluar program dalam NodeJS

Untuk keluar dari program NodeJS yang sedang berjalan, kita boleh menggunakan Ctrl C atau process.exit() untuk keluar. [Pembelajaran yang disyorkan: "tutorial nodejs"]

Kedua-dua operasi akan memaksa proses untuk keluar secepat mungkin, walaupun masih terdapat operasi tak segerak yang tidak lengkap belum selesai, termasuk process.stdout dan process.stderr Operasi I/O.

Jika proses Node.js perlu ditamatkan kerana keadaan ralat, adalah lebih selamat untuk membuang ralat yang tidak ditangkap dan membenarkan proses itu ditamatkan dengan sewajarnya daripada memanggil process.exit(), seperti:

import process from 'process';

// 如何正确设置退出码,同时让进程正常退出。
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exitCode = 1;
}
Salin selepas log masuk

dalam Worker Dalam utas, fungsi ini menghentikan utas semasa dan bukannya proses semasa.

Jadi untuk beberapa program NodeJS yang keluar secara tidak dijangka, bagaimana untuk mendapatkan exitCode? Apakah maksud setiap kod keluar? Mari belajar mengenainya hari ini.

Dapatkan kod keluar melalui proses child_process NodeJS

Kaedah child_process.fork() ialah kes khas child_process.spawn(), khusus digunakan untuk melahirkan proses NodeJS baharu.

const fork = require("child_process").fork;

console.log("main ", process.argv);

const fs = require("fs");

const fd = fs.openSync("./a.log", "a");

const child = fork("./index.js", {
    stdio: ["ipc", "pipe", fd]
});

child.on("error", (error) => {
    let info = `child process error ${error}`;
    fs.writeSync(fd, info);
    console.log(info);
});

child.on("exit", (code) => {
    let info = `child process exited with code ${code}`;
    fs.writeSync(fd, info);
    console.log(info);
});
Salin selepas log masuk

Parameter pelaksanaan subrutin

const fork = require('child_process').fork;

console.log('main ',process.argv);

const fs=require('fs');

const fd = fs.openSync('./a.log','a');

// 子程序参数
let args = [];
args[0] = 'test';

const child = fork('./index.js',args,{
    stdio:['ipc','pipe',fd]
});

child.on('error', (error) => {
    let info = `child process error ${error}`;
    fs.writeSync(fd,info);
    console.log(info);
});

child.on('exit', (code) => {
    let info = `child process exited with code ${code}`;
    fs.writeSync(fd,info);
    console.log(info);
});
Salin selepas log masuk

Kod keluar NodeJS

NodeJS biasanya keluar dengan kod status 0 apabila tiada lagi operasi tak segerak menunggu berhenti. Gunakan kod status berikut dalam kes lain:

  • 1 Pengecualian Maut Tidak Ditangkap: Pengecualian yang tidak ditangkap berlaku dan ia tidak dilindungi oleh domain atau 'uncaughtException' perjanjian pengendali acara dengan.
  • 2: Tidak digunakan (dikhaskan oleh Bash untuk penyalahgunaan terbina dalam)
  • 3 Ralat penghuraian JavaScript dalaman : Sumber JavaScript dalaman semasa bootstrapping NodeJS Kod menyebabkan ralat penghuraian. Ini sangat jarang berlaku dan biasanya hanya berlaku semasa pembangunan NodeJS itu sendiri.
  • 4 Penilaian JavaScript dalaman gagal: Kod sumber JavaScript dalaman semasa bootstrapping NodeJS gagal mengembalikan nilai fungsi apabila dinilai. Ini sangat jarang berlaku dan biasanya hanya berlaku semasa pembangunan NodeJS itu sendiri.
  • 5 Ralat Maut: Ralat maut yang tidak boleh dipulihkan wujud dalam V8. Biasanya mesej yang diawali dengan FATAL ERROR akan dicetak kepada ralat standard.
  • 6 Pengendali pengecualian dalaman untuk bukan fungsi: Terdapat pengecualian yang tidak ditangkap, tetapi pengendali pengecualian maut dalaman entah bagaimana ditetapkan kepada bukan fungsi dan tidak boleh dipanggil.
  • 7 Kegagalan masa jalan pengendali pengecualian dalaman: Terdapat pengecualian yang tidak ditangkap dan fungsi pengendali pengecualian maut dalaman itu sendiri telah menyebabkan ralat semasa cuba mengendalikannya. Ini boleh berlaku, sebagai contoh, jika pemegang 'uncaughtException' atau domain.on('error') melemparkan ralat.
  • 8: Tidak digunakan. Dalam versi NodeJS sebelumnya, kod keluar 8 kadangkala menunjukkan pengecualian yang tidak ditangkap.
  • 9 Argumen tidak sah: Pilihan yang tidak diketahui telah ditentukan atau pilihan yang memerlukan nilai telah disediakan tanpa nilai.
  • 10 Kegagalan masa jalan JavaScript dalaman: Kod sumber JavaScript dalaman dalam proses bootstrap NodeJS melemparkan ralat semasa memanggil fungsi bootstrap. Ini sangat jarang berlaku dan biasanya hanya berlaku semasa pembangunan NodeJS itu sendiri.
  • 12 Parameter nyahpepijat tidak sah: Pilihan --inspect dan/atau --inspect-brk ditetapkan, tetapi nombor port yang dipilih tidak sah atau tidak tersedia.
  • 13 Peringkat teratas yang belum selesai menanti: await digunakan di luar fungsi dalam kod peringkat atas, tetapi Promise yang diluluskan tidak pernah diselesaikan.
  • >128 Isyarat keluar: Jika NodeJS menerima isyarat maut, seperti SIGKILL atau SIGHUP, kod keluarnya ialah ditambah dengan nilai kod isyarat . Ini adalah amalan POSIX standard, kerana kod keluar ditakrifkan sebagai integer 7-bit, dan isyarat keluar menetapkan bit tinggi dan kemudian mengandungi nilai kod isyarat. Contohnya, nilai isyarat SIGABRT ialah 6, jadi kod keluar yang dijangkakan ialah 6 atau 134.

Ringkasan

Di atas ialah kaedah untuk mendapatkan kod keluar program NodeJS dan penghitungan kod keluar.

~Artikel ini telah tamat, terima kasih kerana membaca!

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Perbincangan ringkas tentang cara mendapatkan kod keluar program dalam NodeJS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan