Saya membuka port # 5955 dari kelas java untuk berkomunikasi dari klien. Bagaimana saya menutup port ini setelah saya selesai? dan juga perintah mana yang dapat menunjukkan kepada saya jika port terbuka atau tertutup?
Saya membuka port # 5955 dari kelas java untuk berkomunikasi dari klien. Bagaimana saya menutup port ini setelah saya selesai? dan juga perintah mana yang dapat menunjukkan kepada saya jika port terbuka atau tertutup?
Jawaban:
Cari tahu ID proses (PID) yang menempati nomor port (mis., 5955) yang ingin Anda bebaskan
sudo lsof -i :5955
Matikan proses yang saat ini menggunakan port menggunakan PID-nya
sudo kill -9 PID
kill PID
(yang menyiratkan -15), kemudian coba -2 dan -1. -9 adalah pilihan terakhir hanya jika setiap opsi lain gagal berfungsi.
Untuk menemukan prosesnya coba:
sudo lsof -i :portNumber
Matikan proses yang saat ini menggunakan port menggunakan PID-nya
kill PID
dan kemudian periksa untuk melihat apakah port ditutup. Jika tidak, coba:
kill -9 PID
Saya hanya akan melakukan yang berikut jika sebelumnya tidak berhasil
sudo kill -9 PID
Untuk amannya. Sekali lagi tergantung pada bagaimana Anda membuka porta, ini mungkin tidak masalah.
Bagaimanapun Anda membuka port, Anda menutupnya dengan cara yang sama. Misalnya, jika Anda membuat soket, ikatkan ke port 0.0.0.0.095955, dan panggil dengarkan, tutup soket yang sama.
Anda juga dapat mematikan proses yang membuka porta.
Jika Anda ingin mengetahui proses apa yang memiliki port terbuka, coba ini:
lsof -i :5955
Jika Anda ingin tahu apakah suatu port terbuka, Anda dapat melakukan perintah lsof yang sama (jika ada proses yang terbuka, itu terbuka; jika tidak, itu tidak), atau Anda dapat mencoba menyambungkannya, misalnya:
nc localhost 5955
Jika segera kembali tanpa output, port tidak terbuka.
Mungkin perlu disebutkan bahwa, secara teknis, ini bukan port yang terbuka, tetapi host: kombinasi port. Misalnya, jika Anda terhubung ke LAN sebagai 10.0.1.2, Anda dapat mengikat soket ke 127.0.0.1.195955, atau 10.0.1.2-5955, tanpa salah satu yang mempengaruhi yang lain, atau Anda dapat mengikat ke 0.0.0.0 : 5955 untuk menangani keduanya sekaligus. Anda dapat melihat semua alamat IPv4 dan IPv6 komputer Anda dengan ifconfig
perintah.
Di tahun 2018 inilah yang berhasil bagi saya menggunakan MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
kemudian:
sudo kill -9 yourPIDnumber
lsof -nPi
sedikit lebih baik karena nomor port sebenarnya terlihat di output dan Anda mendapatkan perasaan yang lebih baik tentang apa yang Anda bunuh.
sudo lsof -nPi | grep LISTEN
Anda juga dapat menggunakan perintah pertama ini untuk membunuh proses yang memiliki port tertentu:
sudo netstat -ap | grep :<port_number>
Misalnya, katakanlah proses ini menampung port 8000 TCP, kemudian jalankan perintah:
sudo netstat -ap | grep :8000
akan menampilkan garis yang sesuai dengan proses yang menahan port 8000 , misalnya:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
Dalam hal ini, procHoldingPort adalah nama proses yang membuka port, 4683 adalah pid, dan 8000 (perhatikan bahwa itu adalah TCP) adalah nomor port yang dipegangnya (yang ingin Anda tutup).
Kemudian bunuh prosesnya, ikuti contoh di atas:
kill 4683
Seperti yang disebutkan di sini, jika itu tidak berhasil (Anda dapat mencoba menggunakan kill dengan -9 sebagai argumen):
kill -9 4683
Sekali lagi, secara umum, lebih baik untuk menghindari pengiriman SIGKILL (-9) jika Anda bisa.
Bersulang,
Orang.
Saya menggunakan lsof
dikombinasikan dengankill
, sebagaimana disebutkan di atas; tetapi menulis skrip bash kecil cepat untuk mengotomatisasi proses ini.
Dengan skrip ini, Anda cukup mengetik killport 3000
dari mana saja, dan itu akan mematikan semua proses yang berjalan di port 3000
.
lsof
dikombinasikan dengan kill
tidak mengembalikan apa pun dan membuat skrip saya bertahan macOS Sierra. Tetapi killport
bekerja seperti pesona dan lebih cepat. Terima kasih!
Saya telah membuat fungsi untuk tujuan ini.
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
Salin & tempel blok kode ini di terminal Anda harus membebaskan port yang Anda inginkan. Ingatlah untuk mengubah nomor port di baris terakhir.
coba di bawah, dengan asumsi port yang sedang berjalan adalah 8000
:
free-port() { kill "$(lsof -t -i :8000)"; }
Saya menemukan referensi di sini
Pertama temukan Procees id (pid) yang telah menempati port yang diperlukan. (Mis. 5434)
ps aux | grep 5434
2. bunuh proses itu
kill -9 <pid>