Anda agak menanyakan pertanyaan yang salah di sini. Sangat tidak mungkin untuk hanya "menutup port" dari luar aplikasi yang membuka soket mendengarkannya. Satu-satunya cara untuk melakukan ini adalah sepenuhnya membunuh proses yang memiliki port. Kemudian, dalam sekitar satu atau dua menit, port akan tersedia lagi untuk digunakan. Inilah yang sedang terjadi (jika Anda tidak peduli, lewati sampai akhir di mana saya menunjukkan kepada Anda cara membunuh proses yang memiliki port tertentu):
Port adalah sumber daya yang dialokasikan oleh OS untuk berbagai proses. Ini mirip dengan meminta OS untuk penunjuk file. Namun, tidak seperti file pointer, hanya SATU proses pada suatu waktu yang dapat memiliki port. Melalui antarmuka soket BSD, proses dapat membuat permintaan untuk mendengarkan pada port, yang kemudian diberikan oleh OS. OS juga akan memastikan tidak ada proses lain yang mendapatkan port yang sama. Pada titik mana pun, proses dapat melepaskan port dengan menutup soket. OS kemudian akan mengklaim kembali port tersebut. Atau, jika proses berakhir tanpa melepaskan port, OS pada akhirnya akan mengklaim kembali port (meskipun itu tidak akan terjadi segera: itu akan memakan waktu beberapa menit).
Sekarang, apa yang ingin Anda lakukan (cukup tutup port dari baris perintah), tidak mungkin karena dua alasan. Pertama, jika memungkinkan, itu berarti satu proses bisa mencuri sumber daya proses lain (pelabuhan). Ini akan menjadi kebijakan yang buruk, kecuali terbatas pada proses istimewa. Alasan kedua adalah tidak jelas apa yang akan terjadi pada proses yang dimiliki pelabuhan jika kita membiarkannya terus berjalan. Kode proses ditulis dengan asumsi bahwa ia memiliki sumber daya ini. Jika kita hanya mengambilnya, itu akan berakhir dengan sendirinya, jadi OS jangan biarkan Anda melakukan ini, bahkan jika Anda adalah proses yang istimewa. Sebaliknya, Anda harus membunuh mereka.
Bagaimanapun, berikut ini cara membunuh proses yang memiliki port tertentu:
sudo netstat -ap | grep :<port_number>
Itu akan menampilkan garis yang sesuai dengan port holding proses, 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.
Kemudian, lihat di kolom terakhir, Anda akan melihat /. Kemudian jalankan ini:
kill <pid>
Jika itu tidak berhasil (Anda dapat memeriksa dengan menjalankan kembali perintah netstat). Melakukan hal ini:
kill -9 <pid>
Secara umum, lebih baik untuk menghindari pengiriman SIGKILL jika Anda bisa. Inilah sebabnya saya memberitahu Anda untuk mencoba kill
sebelumnya kill -9
. Hanya menggunakan kill
mengirimkan SIGTERM yang lebih lembut.
Seperti yang saya katakan, port masih perlu beberapa menit untuk membuka kembali jika Anda melakukan ini. Saya tidak tahu cara mempercepat ini. Jika orang lain melakukannya, saya ingin mendengarnya.