Bagaimana cara menutup port terbuka dari terminal di Mac?
197
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?
Mengirim -9 seharusnya bukan upaya pertama untuk membunuh suatu proses, dan itu kebiasaan yang sangat buruk. Seingat saya, Anda harus terlebih dahulu hanya menggunakan kill PID(yang menyiratkan -15), kemudian coba -2 dan -1. -9 adalah pilihan terakhir hanya jika setiap opsi lain gagal berfungsi.
Meow
3
memang membunuh pID tanpa bendera seperti yang disarankan oleh @ Meow dan ini bekerja untuk saya
Toni Leigh
39
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 ifconfigperintah.
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.
Saya menggunakan lsofdikombinasikan dengankill , sebagaimana disebutkan di atas; tetapi menulis skrip bash kecil cepat untuk mengotomatisasi proses ini.
Dengan skrip ini, Anda cukup mengetik killport 3000dari mana saja, dan itu akan mematikan semua proses yang berjalan di port 3000.
Kamu menyelamatkan hariku. Untuk beberapa alasan lsofdikombinasikan dengan killtidak mengembalikan apa pun dan membuat skrip saya bertahan macOS Sierra. Tetapi killportbekerja seperti pesona dan lebih cepat. Terima kasih!
Wout
4
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.
Ketika program yang membuka port keluar, port akan ditutup secara otomatis. Jika Anda mematikan proses Java yang menjalankan server ini, itu harus dilakukan.
Jawaban:
Cari tahu ID proses (PID) yang menempati nomor port (mis., 5955) yang ingin Anda bebaskan
Matikan proses yang saat ini menggunakan port menggunakan PID-nya
sumber
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:
Matikan proses yang saat ini menggunakan port menggunakan PID-nya
dan kemudian periksa untuk melihat apakah port ditutup. Jika tidak, coba:
Saya hanya akan melakukan yang berikut jika sebelumnya tidak berhasil
Untuk amannya. Sekali lagi tergantung pada bagaimana Anda membuka porta, ini mungkin tidak masalah.
sumber
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:
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:
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.sumber
port find 5900 sangat sederhana:
kemudian mempertimbangkan 59553 sebagai PID
sumber
Di tahun 2018 inilah yang berhasil bagi saya menggunakan MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
kemudian:
sudo kill -9 yourPIDnumber
sumber
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
Satu liner adalah yang terbaik
Contoh: Di mac, ingin menghapus port 9604. Perintah berikut berfungsi seperti mantra
sumber
Anda juga dapat menggunakan perintah pertama ini untuk membunuh proses yang memiliki port tertentu:
Misalnya, katakanlah proses ini menampung port 8000 TCP, kemudian jalankan perintah:
akan menampilkan garis yang sesuai dengan proses yang menahan port 8000 , misalnya:
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:
Seperti yang disebutkan di sini, jika itu tidak berhasil (Anda dapat mencoba menggunakan kill dengan -9 sebagai argumen):
Sekali lagi, secara umum, lebih baik untuk menghindari pengiriman SIGKILL (-9) jika Anda bisa.
Bersulang,
Orang.
sumber
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 port3000
.https://github.com/xtrasimplicity/killport
sumber
lsof
dikombinasikan dengankill
tidak mengembalikan apa pun dan membuat skrip saya bertahan macOS Sierra. Tetapikillport
bekerja seperti pesona dan lebih cepat. Terima kasih!Saya telah membuat fungsi untuk tujuan ini.
Salin & tempel blok kode ini di terminal Anda harus membebaskan port yang Anda inginkan. Ingatlah untuk mengubah nomor port di baris terakhir.
sumber
coba di bawah, dengan asumsi port yang sedang berjalan adalah
8000
:Saya menemukan referensi di sini
sumber
Ketika program yang membuka port keluar, port akan ditutup secara otomatis. Jika Anda mematikan proses Java yang menjalankan server ini, itu harus dilakukan.
sumber
Pertama temukan Procees id (pid) yang telah menempati port yang diperlukan. (Mis. 5434)
ps aux | grep 5434
2. bunuh proses itu
sumber