cara melepaskan localhost dari Kesalahan: dengarkan EADDRINUSE

120

saya menguji server yang ditulis dalam nodejs di windows 7 dan ketika saya mencoba menjalankan penguji di baris perintah saya mendapatkan kesalahan berikut

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)

bagaimana cara memperbaikinya tanpa me-reboot?

adam
sumber
9
sudo killall nodemungkin berguna
Hashir Hussain

Jawaban:

101

Ini berarti alamat yang Anda coba ikat ke server sedang digunakan. Coba port lain atau tutup program menggunakan port itu.

fent
sumber
Saya tidak dapat menemukan apa pun menggunakan port 3000, tetapi mengubahnya berhasil!
Dennis
7
Karena program node tunggal ini adalah satu-satunya hal yang menggunakan port 3000 pada mesin saya, tampaknya cukup jelas bahwa sesuatu telah terjadi untuk mencegah proses node saya dimatikan dengan benar. Itu berfungsi ketika saya menggunakan node app.jsdan menghentikannya dengan Ctrl + C, tetapi mulai mengalami masalah EADDRINUSE setelah pertama kali saya menggunakannya npm start, jadi tampaknya solusi sebenarnya adalah menggunakan sesuatu selain Ctrl + C untuk mematikan setelah menggunakan npm start.
David Mason
npm startSkrip Anda mungkin lebih dari satu program node, atau program node yang dijalankan di latar belakang, atau program mungkin memiliki proses anak yang menggunakan port tersebut.
merayakan
1
Sangat sering, kesalahan ini terjadi karena proses node jet belum dihentikan. Tetapi terkadang port sedang digunakan oleh proses lain, dan oleh karena itu mungkin sulit untuk memahami / menemukan proses yang benar yang memblokirnya. WolfReporter di bawah ini memiliki solusi yang tepat untuk masalah ini! stackoverflow.com/a/22875192/36975
qualbeen
6
Saya melakukannya ps aux | grep node, temukan id proses (kolom kedua) dan cukup bunuh dengan kill <pid>(milik saya dulu kill 18762).
nik_m
168

Lari:

ps -ax | grep node

Anda akan mendapatkan sesuatu seperti:

60778 ??         0:00.62 /usr/local/bin/node abc.js

Kemudian lakukan:

kill -9 60778
Komposr
sumber
Terima kasih! Bekerja di mesin saya!
olefrank
Terima kasih. Inilah yang saya butuhkan. Saya telah menginstal pm2 yang memulai aplikasi node secara otomatis ketika ditutup. Saya harus menonaktifkan pm2 ke node mulai otomatis.
KlevisGjN
Bekerja! Terima kasih banyak
Wim den Herder
9
Bagaimana Anda melakukannya di Windows?
William
kill -15 60778akan jauh lebih baik karena akan memungkinkan proses untuk keluar dengan anggun ( SIGTERM) daripada jika mengirimSIGKILL
praj
39

Di Linux (setidaknya turunan Ubuntu)

killall node

lebih mudah dari formulir ini.

ps | grep <something>
kill <somepid>

Keduanya tidak akan berfungsi jika Anda memiliki anak yatim piatu yang memegang port. Sebaliknya, lakukan ini:

netstat -punta | grep <port>

Jika port ditahan, Anda akan melihat sesuatu seperti ini:

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>

Sekarang bunuh dengan pid:

kill -9 <pid>
WolfReporter
sumber
1
Ini harus ditandai sebagai jawaban lengkap. Karena dalam kasus saya juga, itu adalah anak yatim piatu. Apakah ini yang mereka sebut proses zombie?
Nithish Inpursuit Ofhappiness
1
Alih-alih seperti yang diharapkan <pid>/<parent>saya dapatkan-
Francisco Corrales Morales
35

Perintah berikut akan memberi Anda daftar proses node yang sedang berjalan.

ps | grep node

Untuk membebaskan port tersebut, hentikan proses menggunakan yang berikut ini.

kill <processId>
wcurtis.dll
sumber
3
Anda mungkin ingin menambahkan | grep -v grepuntuk mengecualikan grepproses.
Garrett Hyde
6
Seperti yang ditulis poster asli: "di windows 7" ... ;-)
Golo Roden
4
Alternatif yang jauh lebih baik adalahpidof node
Itay Grudev
pidofmudah dipasang untuk saya di osx dengan homebrewbrew install pidof
electblake
1
Jika Anda menjalankan lebih dari sekadar aplikasi node, ada kemungkinan bahwa alamat tersebut terikat ke beberapa aplikasi lain. Bukankah lebih baik mencari pid yang terikat ke port yang Anda coba untuk mulai? yaitu: untuk linux Anda bisa menggunakan netstat -lnptu | grep port #. Tidak yakin apa yang setara untuk windows.
chrisst
31

Anda mendapatkan kesalahan EADDRINUSEkarena porta, yang ingin digunakan aplikasi Anda, ditempati oleh proses lain. Untuk melepaskan port ini, Anda perlu menghentikan proses pendudukan.

Karena Anda menggunakan Windows , Anda dapat menghentikan proses menggunakan command prompt ( cmd). Dengan cmdAnda dapat menemukan ID proses (PID) dari aplikasi pemblokiran. Anda akan membutuhkan PID untuk menghentikan / menghentikan proses.

Berikut adalah panduan langkah demi langkah ...

  1. Temukan semua proses yang berjalan pada port tertentu (dalam contoh ini, Port adalah "3000"):

    netstat -ano | temukan ": 3000"

  2. The netstatperintah akan daftar semua proses yang berjalan pada port tertentu. Di kolom terakhir netstathasil Anda dapat melihat PIDs (dalam contoh ini, PID adalah "8308"). Anda dapat mengetahui lebih lanjut tentang spesifik PIDdengan menjalankan perintah berikut:

    daftar tugas / fi "pid eq 8308"

  3. Jika Anda ingin menghentikan suatu proses, Anda dapat melakukannya dengan perintah berikut dengan menggunakan nya PID(dalam contoh ini, PID adalah "8308"):

    taskkill / pid 8308 / f

Screenshot

masukkan deskripsi gambar di sini

Benny Neugebauer
sumber
1
penjelasan yang solid.
Joe Healy
19

Ketika Anda mendapatkan kesalahan Kesalahan: dengarkan EADDRINUSE,

Coba jalankan perintah shell berikut:

netstat -a -o | grep 8080
taskkill /F /PID 6204

Saya greped untuk 8080, karena saya tahu server saya berjalan pada port 8080. ( staticmemberitahu saya ketika saya memulainya: 'melayani "." Di http://127.0.0.1:8080 '.) Anda mungkin harus mencari yang lain Pelabuhan.

swathy valluri
sumber
1
Akhirnya! Jawaban yang mencari berdasarkan port, bukan dengan proses. Bukan hanya node yang dapat mengikat port!
Michael Scheper
Saya menghasilkan modul untuk mendeteksi proses yang sedang berjalan yang mengunci port, yang disebut porthog . Ini pada dasarnya mengeksekusi kode di atas.
Corey
15

misalkan server Anda berjalan port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)

setelah itu digunakan kill -9 <pid>

dalam kasus di atas sudo kill -9 11716

Arun Kasyakar
sumber
12

gunakan perintah di bawah ini untuk menghentikan proses yang berjalan pada port tertentu - 3000 dalam contoh di bawah ini

kill -9 $(lsof -t -i:3000)
Atta Ur Rahman
sumber
7

Salah satu solusi yang mungkin berhasil bagi saya adalah menutup jendela di browser tempat saya menjalankan skrip " http: // localhost: 3000 / " yang sesuai.

iloo
sumber
Ya, jendela browser masih terbuka adalah masalah umum dengan port localhost :-)
Dave Everitt
7

Periksa ID Proses

sudo lsof -i: 8081

Daripada membunuh Proses tertentu

sudo kill -9 2925

masukkan deskripsi gambar di sini

Menyerah Kumar
sumber
6

Saat Anda mendapatkan kesalahan

Kesalahan: dengarkan EADDRINUSE

Buka command prompt dan ketik instruksi berikut ini:

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

setelah itu restart antarmuka celah telepon.

Jika Anda ingin mengetahui phonegap ID proses mana yang digunakan, buka TASK MANAGER dan lihat kolom heading PID dan temukan nomor PID.

Eshan Chattaraj
sumber
Saya tidak bisa mendapatkan taskkill untuk bekerja, jadi saya membuka task manager dan menambahkan PID dan membunuhnya di sana thx
Tom Stickel
5

killall -9Node yang disebutkan di atas , yang disarankan oleh Patrick berfungsi seperti yang diharapkan dan memecahkan masalah, tetapi Anda mungkin ingin membaca bagian edit dari jawaban ini tentang mengapa kill -9mungkin bukan cara terbaik untuk melakukannya.

Selain itu, Anda mungkin ingin menargetkan satu proses daripada membunuh semua proses aktif secara membabi buta.

Dalam hal ini, pertama-tama dapatkan ID proses (PID) dari proses yang berjalan pada port tersebut (misalnya 8888):

lsof -i tcp:8888

Ini akan mengembalikan sesuatu seperti:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1

(DENGARKAN) Kemudian lakukan saja (ps - sebenarnya tidak. Harap terus membaca di bawah):

kill -9 57385
Hemant Raghuwanshi
sumber
4

Ini berfungsi di Mac:

Langkah 1.

sudo lsof -i tcp:3000 (or whatever port you want to kill)

Perintah di atas akan memberi Anda Id Proses yang saat ini memegang port.

Langkah 2.

Kill -9 <pid>
saran3h
sumber
3

Anda dapat mengubah port Anda di app.js atau di file konfigurasi proyek Anda.

default ('port', 80)

dan untuk melihat apakah port 80 sudah digunakan, Anda dapat melakukannya

netstat -antp | grep 80

netstat -antp | simpul grep

Anda mungkin ingin melihat apakah proses node sudah berjalan atau belum.

ps -ef | simpul grep

dan jika Anda menemukan itu sudah berjalan, Anda dapat membunuhnya menggunakan

killall node

Adeel Ahmad
sumber
1

Saya membuat 2 server, mendengarkan pada port yang sama 8081, menjalankan dari kode yang sama, sambil belajar

Perangkat pembuatan server pertama telah berfungsi. Pembuatan server kedua gagal dengan EADDRINUSE

penundaan panggilan balik node.js mungkin menjadi alasan di balik tidak berfungsi, atau pembuatan server ke-2 memiliki pengecualian, dan program keluar, sehingga server pertama juga ditutup

2 petunjuk masalah server, saya dapatkan dari: Bagaimana cara memperbaiki Kesalahan: mendengarkan EADDRINUSE saat menggunakan nodejs?

Manohar Reddy Poreddy
sumber
1

Kesalahan: dengarkan EADDRINUSE untuk menyelesaikannya di Ubuntu jalankan di terminal netstat -nptl dan setelah kill -9 {process-number}ini perintah ini untuk mematikan proses node dan sekarang Anda dapat mencoba menjalankan lagi perintah node server.js

Ex

dengarkan EADDRINUSE ::: 8080

netstat -nptl

tcp6 0 0 ::: 9000 ::: * DENGARKAN 9660 / java
tcp6 0 0 ::: 5800 ::: * DENGARKAN -
tcp6 0 0 ::: 5900 ::: * DENGARKAN -
tcp6 0 0 ::: 8080 :: : * DENGARKAN 10401 / node
tcp6 0 0 ::: 20080 ::: * DENGARKAN 9660 / java
tcp6 0 0 ::: 80 ::: * DENGARKAN -
tcp6 0 0 ::: 22 ::: * DENGARKAN -
tcp6 0 0 ::: 10137 ::: * DENGARKAN 9660 / java

bunuh -9 10401

navnit kapadiya
sumber
2
Pengguna mengatakan itu di Windows. Pada Windows netstatmenerima parameter yang berbeda. netstat -a -p tcp -b -vakan menampilkan nama proses.
arboreal84
0

Saya telah menginstal node red di Mac dan Raspberry Pi saya. Memiliki masalah yang persis sama dan melakukan 'killall' tidak membantu. Setelah saya mematikan Raspberry Pi dan memulai ulang komputer saya, itu berfungsi dengan baik.

alkopop79.dll
sumber
0

Mungkin saja Anda telah mencoba menjalankan perintah npm start di dua tab berbeda. Anda tidak dapat menjalankan npm start ketika sudah berjalan di beberapa tab. Centang sekali.

Bhudke Aakshayy
sumber
Harap berikan detail lebih lanjut.
DeshDeep Singh
0

Bagi siapa pun yang telah mencoba semua cara di atas, tetapi masih tidak dapat menemukan proses pemerah pipi, coba semuanya lagi tetapi pastikan Anda menyertakan "sudo" di depan perintah.

MMMTroy
sumber
0

Jika Anda lebih menyukai UI, temukan proses Node.js di task manager windows dan matikan.

polina-c
sumber
0

ps -ef | grep node temukan app.js, matikan pid dari app.js

megan5
sumber
0

cukup bunuh node sebagai pkill -9 node di terminal ubantu dari pada node start

Aditya Prakash
sumber
0

Anda harus mematikan port dengan mencoba menggunakan perintah berikut di terminal

$ sudo killall -9 nodejs
Shivam Kohli
sumber
0

[TERPECAHKAN]

Ini mungkin sudah terlambat tetapi itu bekerja seperti pesona.

Anda perlu pm2diinstal

npm install -g pm2

Untuk menghentikan server yang sedang berjalan (server.js):

pm2 stop -f server.js
dariush f
sumber
0

Saya telah memecahkan masalah ini dengan menambahkan di bawah ini di package.json saya untuk membunuh PORT aktif - 4000 (dalam kasus saya) Berjalan di WSL2 / Linux / Mac

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

Sumber

zashishz.dll
sumber
-1

Untuk mematikan server node pertama-tama jalankan perintah ini di terminal Anda:

  1. top
  2. buka jendela lain lalu salin server iddari jendela sebelumnya: PID number -9 kill jadi sekarang Anda mematikan server node Anda, coba lagi untuk menjalankan aplikasi Anda.
Mohammed Dwina
sumber
-1

Saya menggunakan perintah netstat -ano | grep "portnumber"untuk mencantumkan nomor port / PID untuk proses itu. Kemudian, Anda bisa menggunakantaskkill -f //pid 111111 untuk menghentikan proses, nilai terakhir adalah pid yang Anda temukan dari perintah pertama.

Satu masalah yang sering saya hadapi adalah node respawning bahkan setelah menghentikan proses, jadi saya harus menggunakan task manager lama yang baik untuk secara manual mematikan proses node.

davida227
sumber
-4

Di jendela, silakan jalankan perintah ini:

taskkill /F /PID 1952
thinhnk
sumber
1
1952 adalah variabel. Proses untuk membunuh mungkin memiliki ID yang berbeda.
Desain oleh Adrian