Bagaimana cara menemukan (dan membunuh) proses yang mendengarkan / menggunakan port tcp saya? Saya menggunakan mac os x.
Kadang-kadang, setelah crash atau beberapa bug, aplikasi rel saya mengunci port 3000. Saya tidak dapat menemukannya menggunakan ...
Ketika melakukan
rails server
saya mendapat
Alamat sudah digunakan - bind (2) (Errno :: EADDRINUSE)
Pembaruan 2014:
Untuk melengkapi beberapa jawaban di bawah ini: Setelah menjalankan perintah kill, menghapus file pid mungkin diperlukan rm ~/mypath/myrailsapp/tmp/pids/server.pid
function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 }
Jawaban:
Anda dapat mencoba
netstat
Untuk macOS El Capitan dan yang lebih baru (atau jika netstat Anda tidak mendukung
-p
), gunakanlsof
Untuk penggunaan Centos 7
sumber
lsof -t -i tcp:#{ARGV.first} | xargs kill
)lsof -t -i tcp:1234 | xargs kill
~/.bash_profile
:findandkill() { port=$(lsof -n -i4TCP:$1 | grep LISTEN | awk '{ print $2 }') kill -9 $port } alias killport=findandkill
Jadi sekarang saya hanya perlu mengetikkillport 8080
dan menghemat beberapa detiksudo
sebelum lsof jika Anda tidak melihat hasil apa pun-P
kelsof
perintah sehingga port mentah terlihat dalam output:lsof -P -i:3000
Temukan:
Membunuh:
sumber
kill -15 <PID>
sebelum menggunakan-9
untuk keselamatan.kill <PID>
tidak cukup / berbahaya / tidak lengkap?kill -15
memberikan proses kesempatan untuk membersihkan sendiri.-9
artinya.Tidak ada yang berhasil bagi saya di atas. Orang lain dengan pengalaman saya dapat mencoba yang berikut (bekerja untuk saya):
Lari:
kemudian periksa status PID yang dilaporkan:
akhirnya, "pergilah dengan itu":
sumber
kill -TERM
(atau hanyakill
) sebelumnyakill -QUIT
. Tidak setiap proses akan melakukan penonaktifan tertib pada SIGQUIT.Satu baris untuk mengekstrak PID dari proses menggunakan port 3000 dan membunuhnya.
Bendera -t menghapus semuanya kecuali PID dari output lsof, membuatnya mudah untuk membunuhnya.
sumber
lsof -ti:3000 -sTCP:LISTEN
Solusi termudah :
Untuk port tunggal:
Bunuh banyak port dengan perintah baris tunggal:
82500 (ID Proses / PID)
82499
82499 82500
Menghentikan proses 82499 dan 82500 dalam satu perintah.
Untuk menggunakan ini dalam
package.json
skrip:"scripts": { "start": "kill $(lsof -ti:3000,3001) && npm start" }
sumber
Baris perintah tunggal ini mudah diingat:
npx kill-port 3000
Untuk alat yang lebih kuat dengan pencarian:
npx fkill-cli
PS: Mereka menggunakan paket javascript pihak ketiga.
npx
hadir dengan Node.js.Sumber: tweet | github
sumber
npx
hadir dengan paketnpm
yang disertakannode.js
, jadi ini bukan paket yang terpisah. Tingkatkan versi node.js dan npm Anda.Anda bisa menggunakannya
lsof -i:3000
.Itu adalah "Daftar Buka File". Ini memberi Anda daftar proses dan file serta port mana yang mereka gunakan.
sumber
lsof -i:3000
.Di Anda
.bash_profile
, buat pintasan untukterminate
proses 3000:Kemudian, hubungi
$terminate
jika diblokir.sumber
Untuk mematikan proses seperti itu, gunakan perintah berikut
Di mana 3000 adalah nomor port proses sedang berjalan
ini mengembalikan id proses (PID) dan dijalankan
Ganti PID dengan nomor yang Anda dapatkan setelah menjalankan perintah pertama
sumber
Ini akan memberi Anda hanya pid, diuji pada MacOS.
sumber
lsof -n -iTCP:3407 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9
Jalankan perintah di OS-X El Captain:
Opsi terse dari lsof hanya mengembalikan PID.
sumber
Salah satu cara untuk membunuh proses pada port adalah dengan menggunakan pustaka python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Setelah diinstal, cukup:
sumber
lsof -t -i:3000
.. sepertinya tidak perlu.Untuk melihat proses memblokir port:
netstat -vanp tcp | grep 3000
Untuk Membunuh proses yang memblokir port:
kill $(lsof -t -i :3000)
sumber
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Akan, bagaimanapun, bekerja di sebagian besar distro linux3000
ditempati. Namun jika tidak ada proses yang memblokir port, maka Anda akan mendapatkankill: not enough arguments
kesalahan.netstat -vanp tcp | grep 3000
, untuk port Anda yang sibuk?bash
danzsh
shell. Bekerja dengan baik untuk saya. Tidak yakin mengapa itu tidak berhasil untuk Anda. Mungkin ada sesuatu dengan High Sierra? Saya tidak tahu: /Temukan koneksi yang terbuka
Bunuh dengan ID proses
sumber
Temukan dan bunuh:
Baris perintah tunggal ini mudah dan berfungsi dengan benar.
sumber
Kemungkinan cara untuk mencapai ini:
teratas
Perintah teratas adalah cara tradisional untuk melihat penggunaan sumber daya sistem Anda dan melihat proses yang menggunakan sebagian besar sumber daya sistem. Top menampilkan daftar proses, dengan yang menggunakan CPU terbanyak di atas.
ps
Perintah ps berisi daftar proses yang berjalan. Perintah berikut mencantumkan semua proses yang berjalan di sistem Anda:
Anda juga dapat menyalurkan output melalui grep untuk mencari proses tertentu tanpa menggunakan perintah lain. Perintah berikut akan mencari proses Firefox:
Cara paling umum menyampaikan sinyal ke suatu program adalah dengan perintah kill.
lsof
Daftar semua file yang terbuka dan proses yang membukanya.
atau
sumber
lsof -i tcp:port_number
- akan mendaftar proses yang berjalan pada port itukill -9 PID
- akan membunuh prosesnyadalam kasus Anda, itu akan terjadi
lsof -i tcp:3000
dari terminal Anda temukan PID proseskill -9 PID
sumber
Dua perintah ini akan membantu Anda menemukan dan membunuh proses server
sumber
Tambahkan ke
~/.bash_profile
:Lalu
source ~/.bash_profile
, larikillTcpListen 8080
sumber
Menggunakan sindresorhus Ini fkill alat, Anda dapat melakukan ini:
sumber
TL; DR:
Jika Anda berada dalam situasi di mana ada klien dan server menggunakan porta, mis:
maka Anda mungkin tidak ingin membunuh keduanya.
Dalam situasi ini Anda dapat menggunakan
-sTCP:LISTEN
hanya untuk menunjukkan pid dari proses yang mendengarkan. Menggabungkan ini dengan-t
format singkat Anda dapat mematikan proses secara otomatis:sumber
Saya membuat sedikit fungsi untuk ini, menambahkannya ke file rc Anda (
.bashrc
,.zshrc
atau apa pun)maka Anda bisa mengetik
kill-by-port 3000
untuk mematikan server rails Anda (mengganti 3000 untuk port apa pun yang sedang berjalan)Jika gagal, Anda selalu bisa mengetik
kill -9 $(cat tmp/pids/server.pid)
dari direktori root railssumber
\$PORT
untuk mendapatkan pesan untuk ditampilkan dengan benar. Kalau tidak, bekerja dengan baik!Untuk membunuh banyak port.
Semoga bantuan ini!
sumber
Anda harus mencoba ini, Teknik ini adalah OS Independen.
Di samping aplikasi Anda ada folder bernama tmp, di dalamnya ada folder lain yang disebut pids. File itu berisi file pid server. Hapus saja file itu. port secara otomatis membunuh dirinya sendiri.
Saya pikir ini adalah cara yang mudah.
sumber
Berikut fungsi bash pembantu untuk membunuh beberapa proses dengan nama atau port
Pemakaian:
Contoh:
sumber
Anda bisa mencoba ini
sumber
Jika Anda menginginkan cara bebas kode - buka pengelola aktivitas dan paksakan simpul simpul :)
sumber
Saya menggunakan ini:
cat tmp/pids/server.pid | pbcopy
Kemudian
kill -9 'paste'
sumber
Langkah 1: Temukan server yang sedang berjalan:
ps aux | grep puma
Langkah 2: Bunuh server tersebut Bunuh -9 [nomor server]sumber
Di mac OS
kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')
sumber