Saya memiliki server TCP sederhana yang mendengarkan port.
var net = require("net");
var server = net.createServer(function(socket) {
socket.end("Hello!\n");
});
server.listen(7777);
Saya memulainya dengan node server.js
dan kemudian menutupnya dengan Ctrl + Z pada Mac. Ketika saya mencoba menjalankannya lagi dengan node server.js
saya mendapatkan pesan kesalahan ini:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)
Apakah saya menutup program dengan cara yang salah? Bagaimana saya bisa mencegah hal ini terjadi?
fg
setelah Ctrl-Z, Anda akan kembali ke tempat sebelumnya. Jadi simpul Anda sebelumnya masih berjalan. Hati-hati jika Anda melakukan ini untuk perintah lain juga!Ctrl+Z
tindakan, metodologi yang tepat bisafg
untuk menghidupkan kembali proses, dan kemudianCtrl+C
membunuhnya dengan tepat.Jawaban:
Untuk mengakhiri program, Anda harus menggunakan Ctrl+ C. Jika Anda melakukannya, ia mengirim
SIGINT
, yang memungkinkan program untuk berakhir dengan anggun, tidak mengikat dari port mana pun ia mendengarkan.Lihat juga: https://superuser.com/a/262948/48624
sumber
Ctrl + C
tidak bekerja untuk saya. Hanya^C
diketik di konsol, dan program tidak keluar.Ctrl+C
bekerja dengan baik. Bagaimanapun, itu masalah terpisah dari masalah Anda yang sebenarnya. Anda harus memposting pertanyaan "Ctrl + C tidak berfungsi" di SuperUser.com.kill -9
, tapi saya tidak mau. Apakah Anda benar-benar yakin aplikasi Anda masih tetap menjaga port terbuka? Saya tidak pernah memiliki masalah itu. Segera setelah aplikasi saya berakhir, koneksi selalu segera diakhiri. Saya akan menggunakan netstat untuk menentukan apakah aplikasi Anda atau sesuatu yang lain ada di port itu.Ctrl+ Zmenangguhkannya, yang artinya masih dapat berjalan.
Ctrl+ Cakan benar-benar membunuhnya.
Anda juga dapat membunuhnya secara manual seperti ini:
Temukan ID proses (kedua dari kiri):
Ini juga bisa berfungsi
sumber
killall node
ke jawaban karena itu benar-benar pilihan termudah dan paling dapat diandalkan (selama Anda baik-baik saja dengan membunuh semua instance)Atau sebagai alternatif Anda dapat melakukan semua ini dalam satu baris:
Anda dapat mengganti simpul di dalam '\ snode \ s' dengan nama proses lainnya.
sumber
Lanjutkan dan bunuh proses:
Ctrl+ Zmenangguhkannya, yang berarti masih berjalan sebagai proses latar belakang yang ditangguhkan.
Anda sekarang berada di terminal prompt ...
Berikan perintah
fg
untuk melanjutkan proses di latar depan.ketik Ctrl+ Cuntuk membunuhnya dengan benar.
Atau, Anda dapat membunuhnya secara manual seperti ini:
( CATATAN: perintah berikut mungkin memerlukan root, begitu
sudo ...
juga teman Anda)atau, jika Anda tidak memiliki pkill, ini mungkin berhasil:
atau mungkin ini:
terkadang proses akan mencantumkan grepnya sendiri, dalam hal ini Anda akan membutuhkan:
.
h / t @ruffin dari komentar pada pertanyaan itu sendiri. Saya memiliki masalah yang sama dan komentarnya membantu saya menyelesaikannya sendiri.
sumber
Anda dapat mengetik
.exit
untuk keluar dari simpul js REPLsumber
Jika Anda menjalankan Node.js secara interaktif (REPL):
Ctrl+ Cakan membawa Anda kembali ke> prompt lalu ketik:
atau cukup gunakan Ctrl+ D.
sumber
$ sudo killall node
di terminal lain berfungsi di mac , sementarakillall node
tidak berfungsi:sumber
di linux coba:
pkill node
di windows:
atau
sumber
Meskipun ini adalah jawaban yang terlambat, saya menemukan ini dari NodeJS docs :
Jadi untuk meringkas Anda dapat keluar dengan:
.exit
dalam nodejs REPL.<ctrl>-C
dua kali.<ctrl>-D
.process.exit(0)
artinya keluar secara alami dari REPL. Jika Anda ingin mengembalikan status lain, Anda dapat mengembalikan angka yang tidak nol.process.kill(process.pid)
adalah cara untuk membunuh menggunakan simpuljs api dari dalam kode Anda atau dari REPL.sumber
Saya menambahkan jawaban ini karena untuk banyak proyek dengan penyebaran produksi, kami memiliki skrip yang menghentikan proses ini sehingga kami tidak perlu melakukannya.
Cara bersih untuk mengelola proses Node Server Anda menggunakan
forever
paket (dariNPM
).Contoh:
Instal Selamanya
npm install forever -g
Jalankan Node Server
forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js
Hasil:
info: Forever processing file: server.js
Shutdown Node Server
forever stop server.js
Hasil
info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247
Ini akan mematikan aplikasi Server Anda.
sumber
Jika Anda ingin menghentikan server Anda dengan
npm stop
atau sesuatu seperti ini. Anda dapat menulis kode yang membunuh proses server Anda sebagai:Periksa tautan ini untuk detailnya: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5
sumber
Saya mengalami masalah di mana saya memiliki beberapa server node berjalan, dan saya ingin membunuh salah satunya dan memindahkannya dari skrip.
Catatan: Contoh ini dalam bash shell di Mac.
Untuk itu saya memastikan untuk membuat
node
panggilan saya sespesifik mungkin. Misalnya daripada meneleponnode server.js
dari direktori aplikasi, saya meneleponnode app_name_1/app/server.js
Maka saya bisa membunuhnya menggunakan:
kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')
Ini hanya akan mematikan proses simpul yang menjalankan app_name_1 / app / server.js.
Jika Anda menjalankan
node app_name_2/app/server.js
proses simpul ini akan terus berjalan.Jika Anda memutuskan ingin membunuh mereka semua dapat Anda gunakan
killall node
seperti yang disebutkan orang lain.sumber
Jawaban terlambat tetapi di windows, membuka task manager dengan CTRL + ALT + DEL kemudian membunuh proses Node.js akan menyelesaikan kesalahan ini.
sumber
Anda dapat bekerja dengan mengikuti perintah untuk lebih spesifik dalam localerver kill (di sini: 8000)
Ini akan memberi Anda grup TCP berikut:
Ini akan mematikan processId yang sesuai dengan TCP *: 8000
sumber
Untuk MacOS
Jalankan kode di bawah ini dan tekan enter
sumber
Anda bisa menggunakan fuser untuk mendapatkan apa yang ingin Anda lakukan.
Untuk mendapatkan id proses dari tugas yang berjalan pada port Anda dapat melakukan:
Katakanlah portnya adalah 8888, perintahnya menjadi:
Dan untuk mematikan proses yang berjalan pada port, cukup tambahkan -k switch.
Contoh (port adalah 8888):
Itu dia! Ini akan menutup proses mendengarkan pada port. Saya biasanya melakukan ini sebelum menjalankan aplikasi server saya.
sumber
Kasus penggunaan saya: pada MacOS , jalankan / jalankan kembali beberapa node server pada port yang berbeda dari sebuah skrip
jalankan :
"cd $PATH1 && node server1.js & cd $PATH2 && node server2.js & ..."
stop1 :
"kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"
stop2, stop3 ...
jalankan kembali :
"stop1 & stop2 & ... & stopN ; run
untuk info lebih lanjut tentang menemukan proses oleh port: Siapa yang mendengarkan pada port TCP yang diberikan pada Mac OS X?
sumber
Untuk windows pertama-tama cari PID dengan nomor port Anda
Setelah itu, bunuh tugas, pastikan Anda berada di root drive "c" Anda Dan perintahnya akan
taskkill /F /PID your pid
sumber
jika Anda menggunakan VS Code dan terminal pilih node dari dropdown sisi kanan terlebih dahulu dan kemudian lakukan Ctrl + C. Kemudian itu akan bekerja
Tekan y saat Anda diminta.
Terima kasih
sumber