Apa perintah yang digunakan untuk keluar? (Yaitu menghentikan proses Node.js)
Apa perintah yang digunakan untuk keluar? (Yaitu menghentikan proses Node.js)
Jawaban:
Panggil metode process
objek global exit
:
process.exit()
process.exit ([kode])
Mengakhiri proses dengan yang ditentukan
code
. Jika dihilangkan, keluar menggunakan kode 'sukses'0
.Untuk keluar dengan kode 'gagal':
process.exit(1);
Shell yang mengeksekusi node harus melihat kode keluar sebagai
1
.
exit
tidak menyesatkan sama sekali. Anda bingung tentang cara kerja Node. Pikirkan Node sebagai server itu sendiri. Itu tidak hanya dinyalakan sesuai kebutuhan, seperti PHP di dalam server web seperti Apache. Node bahkan tidak harus ada hubungannya dengan server web sama sekali! Ini hanya sebuah host untuk beberapa JavaScript, dengan beberapa perpustakaan bawaan yang bagus untuk melakukan hal-hal yang berguna.
mod_php
atau menggunakan Apache. Anda dapat menerapkan kembali httpd di PHP seperti node jika Anda benar-benar ingin atau menggunakan pendekatan yang lebih waras / standar seperti FastCGI seperti yang Anda bisa dalam node.
process.exit()
ini tidak dianjurkan , seperti yang dijelaskan dalam jawaban di bawah ini .
Hanya catatan bahwa menggunakan process.exit([number])
adalah tidak direkomendasikan praktek.
Panggilan
process.exit()
akan memaksa proses untuk keluar secepat mungkin bahkan jika masih ada operasi asinkron yang belum selesai sepenuhnya, termasuk operasi I / O keprocess.stdout
danprocess.stderr
.Dalam sebagian besar situasi, sebenarnya tidak perlu menelepon
process.exit()
secara eksplisit. Proses Node.js akan keluar sendiri jika tidak ada pekerjaan tambahan yang tertunda di loop acara. Theprocess.exitCode
properti dapat diatur untuk memberitahu proses yang kode keluar untuk digunakan saat proses keluar anggun.Misalnya, contoh berikut menggambarkan penyalahgunaan dari
process.exit()
metode yang dapat menyebabkan data yang dicetak untukstdout
yang dipotong dan kehilangan:// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
Alasan ini bermasalah adalah karena menulis
process.stdout
di Node.js kadang-kadang tidak sinkron dan dapat terjadi lebih dari beberapa kutu dari loop peristiwa Node.js. Memanggilprocess.exit()
, bagaimanapun, memaksa proses untuk keluar sebelum penulisan tambahan itustdout
dapat dilakukan.Daripada menelepon
process.exit()
langsung, kode harus mengaturprocess.exitCode
dan memungkinkan proses untuk keluar secara alami dengan menghindari penjadwalan pekerjaan tambahan untuk loop acara:// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
process.exit()
dimaksudkan untuk.
Dari dokumentasi resmi nodejs.org :
process.exit(code)
Mengakhiri proses dengan kode yang ditentukan. Jika dihilangkan, keluar menggunakan kode 'sukses' 0.
Untuk keluar dengan kode 'gagal':
process.exit(1);
code = 0; process.exit(code);
code
?
process.exit()
tanpa parameter sebagai kode default ke 0
process.exit(0);
dan menjalankannya node exit_0.js && echo 'success'
akan mengatakan "berhasil". Jika Anda membuat exit_1.js dengan process.exit(1);
dan menjalankannya node exit_1.js && echo 'success'
tidak akan mengatakan "berhasil" karena proses Anda keluar dengan nol (yang menunjukkan "kegagalan" atau "keluar abnormal" ke shell). Selain itu, Anda akan melihat nilai yang berbeda $?
jika Anda menjalankan node exit_1.js
vs node exit_0.js
(Anda dapat memeriksa dengan melakukan node exit_1.js
dan kemudian melakukan echo $?
).
Jika Anda berada di terminal Unix atau baris perintah Windows dan ingin keluar dari Node REPL, ...
.exit
dan tekan Enter, ataunode
REPL, Ctrl + D untuk keluar adalah perilaku standar, jadi ini juga berfungsi pada Windows.
Dari baris perintah, .exit
itulah yang Anda inginkan:
$ node
> .exit
$
Ini didokumentasikan dalam dokumen REPL . REPL (Read-Eval-Print-Loop) adalah apa yang disebut baris perintah Node.
Dari program normal, gunakan process.exit([code])
.
Itu tergantung pada alasan mengapa Anda bersedia untuk keluar dari proses node.js, tetapi dalam hal apa pun process.exit()
adalah opsi terakhir untuk dipertimbangkan . Kutipan dari dokumentasi:
Penting untuk dicatat bahwa panggilan
process.exit()
akan memaksa proses untuk keluar secepat mungkin bahkan jika masih ada operasi asinkron yang tertunda yang belum selesai sepenuhnya, termasuk operasi I / O keprocess.stdout
danprocess.stderr
.Dalam sebagian besar situasi, sebenarnya tidak perlu menelepon
process.exit()
secara eksplisit. Proses Node.js akan keluar sendiri jika tidak ada pekerjaan tambahan yang tertunda di loop acara. Theprocess.exitCode
properti dapat diatur untuk memberitahu proses yang kode keluar untuk digunakan saat proses keluar anggun.
Mari kita bahas kemungkinan alasan mengapa Anda mungkin ingin keluar dari proses node.js dan mengapa Anda harus menghindari process.exit()
:
Jika skrip telah mencapai akhirnya dan penerjemah simpul tidak keluar, ini menunjukkan bahwa beberapa operasi async masih tertunda. Adalah salah untuk memaksakan penghentian proses process.exit()
pada saat ini. Lebih baik untuk mencoba memahami apa yang menghalangi skrip Anda keluar dengan cara yang diharapkan . Dan ketika Anda menyelesaikan ini, Anda dapat menggunakan process.exitCode
untuk mengembalikan hasil apa pun ke proses panggilan.
Misalnya, jika Anda bersedia menutup aplikasi ekspres dengan anggun . Tidak seperti skrip baris perintah, aplikasi ekspres terus berjalan tanpa batas, menunggu permintaan baru. process.exit()
akan menjadi opsi yang buruk di sini karena itu akan mengganggu semua permintaan yang ada di dalam pipa. Dan beberapa dari mereka mungkin non-idempoten (UPDATE, DELETE). Klien tidak akan pernah tahu apakah permintaan itu selesai atau tidak di sisi server dan itu mungkin menjadi alasan inkonsistensi data antara klien dan server. Satu-satunya solusi yang baik adalah memberi tahu server http untuk berhenti menerima permintaan baru dan menunggu yang menunggu selesai dengan 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");
});
});
Jika masih tidak keluar - lihat Kasus 1.
Selalu lebih baik untuk throw
kesalahan, Anda akan mendapatkan jejak stack dan pesan kesalahan yang diformat dengan baik. Kode tingkat atas selalu dapat memutuskan apakah mereka dapat menangani kesalahan ( catch
) atau membiarkannya menghentikan proses. Di sisi lain, process.exit(1)
akan menghentikan proses secara diam-diam dan tidak akan ada kesempatan untuk pulih dari ini. Ini mungkin satu-satunya "manfaat" dari process.exit()
, Anda dapat yakin bahwa proses akan dihentikan.
Process.exit()
Sepertinya berlebihan untuk sebagian besar aplikasi. Saya sedang mencari yang setara dengan fungsi die () php ... lebih seperti:throw new Error('die msg')
REPL (Baris Perintah)
Tekan ctrl + c
dua kali
Ketik .exit
dan tekan enter
File Skrip
process.exit(code)
Node biasanya keluar dengan kode 0 saat tidak ada lagi operasi async yang tertunda.
process.exit(1)
harus digunakan untuk keluar dengan kode kegagalan. Ini akan memungkinkan kita untuk menyimpulkan bahwa simpul tidak menutup dengan anggun dan terpaksa menutup.
Ada kode keluar lain seperti
3 - Kesalahan Parse JavaScript Internal (sangat jarang)
5 - Kesalahan fatal pada mesin javascript v8
9 - Argumen tidak valid
Untuk daftar lengkap, lihat kode keluar simpul
Saya memiliki aplikasi yang ingin saya:
Saya harus mengait process.exit(code)
ke exit
event handler, atau surat tidak akan dikirim karena menelepon process.exit(code)
langsung membunuh acara yang tidak sinkron.
#!/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
untuk bekerja untuk saya dalam alat baris perintah yang saya bangun (diuji pada Node v4.3.0). Tapi saya tidak bisa bersikap seperti yang didokumentasikan. Ini sangat baik bisa menjadi kasus tepi dengan commander
- meskipun github.com/tj/commander.js/… membuat saya bertanya-tanya. Tidak yakin apakah ada orang lain di luar sana yang melihat masalah ini dengan Node 4, tetapi mendokumentasikannya untuk referensi mendatang.
process.exitCode = 1
, proses keluar dengan kode 0.
Seperti yang ditunjukkan @Dominic, melempar kesalahan yang tidak tertangkap adalah praktik yang lebih baik daripada memanggil process.exit ([kode]) :
process.exitCode = 1;
throw new Error("my module xx condition failed");
Untuk keluar
let exitCode = 1;
process.exit(exitCode)
Kode keluar yang berguna
1 - Catchall untuk kesalahan umum 2 - Penyalahgunaan bawaan shell (menurut dokumentasi Bash) 126 - Perintah yang dipanggil tidak bisa dijalankan 127 - "perintah tidak ditemukan" 128 - Argumen tidak valid untuk keluar 128 + n - Sinyal kesalahan fatal "n" 130 - Script diakhiri oleh Control-C 255 \ * - Keluar dari status di luar jangkauan
Dari kode yang dapat Anda gunakan di process.exit([errorcode])
mana [errorcode]
bilangan bulat opsional ( 0
adalah standar untuk menunjukkan keberhasilan).
Jika Anda menggunakan Read Eval Print Loop (REPL) , Anda dapat menggunakan Ctrl+ D, atau mengetik.exit
Atau, pada Windows atau Linux Anda dapat menggunakan Ctrl+ C, Ctrl+C
Pada Mac perintahnya adalah Ctrl+ Z, Ctrl+Z
node --version
v0.10.18
Tekan Ctrl + C
dua kali atau .exit
.
>
(To exit, press ^C again or type .exit)
>
Saya bisa mendapatkan semua proses simpul saya untuk mati langsung dari Git Bash shell pada Windows 10 dengan mengetik taskkill -F -IM node.exe
- ini mengakhiri semua proses simpul di komputer saya sekaligus. Saya menemukan saya juga bisa menggunakan taskkill //F //IM node.exe
. Tidak yakin mengapa baik -
dan //
bekerja dalam konteks ini. Semoga ini membantu!
Karena proses adalah objek global, Anda tidak perlu mengimpor modul apa pun. Fungsi berikut keluar atau membunuh proses simpul saat ini.
process.exit (kode)
process.kill (process.pid)
process.abort ()
Buka terminal baris perintah tempat aplikasi simpul berjalan dan tekan Ctrl + C
jika Anda ingin keluar dari aplikasi simpul js dari kode,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
jika Anda ingin keluar dari aplikasi node js kemudian tulis
process.exit(1)
dalam kode Anda
Jika Anda ingin memaksa loop eksekusi untuk menghentikan proses, Anda dapat menggunakan proses variabel global yang merupakan turunan dari EventEmitter . Jadi ketika Anda memanggil process.exit () Anda benar-benar memancarkan event keluar yang mengakhiri semua tugas dengan segera bahkan jika masih ada operasi asinkron yang belum dilakukan.
process.exit () mengambil kode keluar (Integer) sebagai parameter. Kode 0 adalah default dan ini berarti keluar dengan 'sukses'. Sedangkan kode 1 berarti keluar dengan 'gagal'.
Jika Anda berada di Windows, buka Task Manager, lalu buka Processes, cari proses yang disebut "node", lalu klik dengan tombol kanan mouse Anda dan kemudian klik opsi "End Process".
Anda dapat menggunakan fungsi process.exit ([code]) .
Jika Anda ingin keluar tanpa 'kegagalan', Anda menggunakan kode 0
:
process.exit(0);
Untuk keluar dengan kode 'gagal' 1
Anda dapat menjalankan:
process.exit(1);
Kode 'kegagalan' dari kegagalan khusus untuk aplikasi. Jadi, Anda dapat menggunakan konvensi Anda sendiri untuk itu.
end()
meminta. Kalau tidak, itu hanya akan menggantung.