Cara Membunuh Proses Linux dengan Nomor Port
Diterbitkan: 2022-10-08Untuk mematikan proses Linux, Anda memerlukan ID atau namanya. Jika yang Anda tahu hanyalah port yang digunakannya, apakah Anda masih bisa mematikannya? Ya, dalam beberapa cara berbeda.
Proses Pembunuhan
Terkadang proses Linux bisa menjadi tidak responsif. Ini mungkin berhenti beroperasi dengan benar, atau mungkin terus bekerja tetapi mengabaikan permintaan untuk mematikannya, atau mulai melahap memori, CPU, atau bandwidth jaringan.
Apa pun motif Anda, ada cara untuk mematikan proses dari baris perintah Linux. Metode klasik adalah menggunakan perintah kill dengan ID proses dari proses yang ingin Anda hentikan. Perintah kill
memiliki beberapa kerabat dekat. Perintah pkill
akan mematikan proses berdasarkan nama, dan killall
akan mematikan semua proses yang dapat menemukan bagian berbagi nama tersebut.
Jika semua yang Anda ketahui tentang suatu proses adalah menggunakan port di komputer Anda, masih ada cara untuk mengidentifikasi dan mematikannya. Dalam istilah jaringan, "port" dapat berarti koneksi fisik tempat Anda memasukkan kabel dengan steker di ujungnya, seperti kabel jaringan CAT5 atau 6, atau dapat berarti port perangkat lunak.
Port perangkat lunak adalah bagian terakhir dari koneksi jaringan. Alamat IP perangkat mengidentifikasi komputer atau peralatan jaringan lainnya. Aplikasi di dalam komputer menggunakan port yang berbeda. Ini memberikan tingkat granularitas yang lain. Lalu lintas jaringan telah tiba di komputer yang benar menggunakan alamat IP, dan dengan menggunakan pengalamatan port dapat dikirimkan ke aplikasi yang benar.
Ini seperti surat pos yang tiba di hotel, kemudian disortir dan dikirim ke kamar yang sesuai. Alamat IP seperti alamat jalan hotel, dan nomor kamar seperti nomor port.
Jika Anda melihat aktivitas jaringan pada port dan Anda tidak mengenali proses yang membuatnya, atau perilakunya bermasalah atau mencurigakan, Anda mungkin ingin mematikan prosesnya. Bahkan jika yang Anda tahu hanyalah nomor port, Anda dapat melacak prosesnya dan mematikannya.
Membuat Koneksi Dengan socat
Agar kita memiliki beberapa koneksi untuk dimatikan, kita akan menggunakan socat
untuk membuat koneksi jaringan menggunakan protokol yang berbeda. Anda harus menginstal socat
. Untuk menginstalnya di Ubuntu, gunakan perintah ini:
sudo apt install socat
Di Fedora gunakan dnf
:
sudo dnf instal socat
Di Manjaro Anda perlu mengetik:
sudo pacman -S socat
Sintaks untuk socat
sangat mudah jika sedikit bertele-tele. Kita perlu memberikan alamat sumber dan tujuan. Untuk masing-masing, kita perlu menyediakan protokol, alamat IP, dan nomor port. Kita dapat mengganti STDIN atau STDOUT sebagai sumber atau tujuan.
Perintah ini membuat koneksi antara soket pendengar TCP pada port 7889, pada alamat IP loopback 127.0.0.1, dan STDOUT. Ampersand “ &
” menjalankan perintah di latar belakang, sehingga kami mempertahankan akses ke baris perintah.
socat tcp-listen:7889,bind=127.0.0.1 stdout &
Kami akan membuat dua koneksi lagi sehingga kami memiliki sedikit pilihan soket menggunakan protokol yang berbeda. Kami akan membuat koneksi UDP dan koneksi SCTP. Satu-satunya bagian dari perintah yang berubah adalah protokol.
socat udp-listen:7889,bind=127.0.0.1 stdout &
socat sctp-listen:9999,bind=127.0.0.1 stdout &
TERKAIT: Apa Perbedaan Antara TCP dan UDP?
Menggunakan Kill
Tentu saja, kita dapat menggunakan kill
untuk menghentikan proses, asalkan kita mengetahui ID dari proses tersebut. Untuk menemukan PID, kita dapat menggunakan perintah lsof
.
Untuk melihat detail proses pada port 7889 yang menggunakan protokol TCP, kami menggunakan opsi -i
(alamat internet), seperti ini.
lsof -i tcp:7889
PID dari proses ini adalah 3141, dan kita dapat melanjutkan dan menggunakannya dengan kill
:
sudo membunuh 3141
Kita dapat menghemat usaha jika kita menggunakan pipa. Jika kita menyalurkan output lsof
ke awk
dan memberi tahu awk
untuk mencari baris yang berisi port yang kita minati—7889—dan mencetak bidang kedua dari baris itu, kita akan mengisolasi PID.
lsof -i tcp:7889 | awk '/7889/{cetak $2}'
Kami kemudian dapat menyalurkan output dari awk
ke perintah kill
menggunakan xargs
. Perintah xargs
mengambil input pipanya dan meneruskannya ke perintah lain sebagai parameter baris perintah. Kami akan menggunakan xargs
dengan perintah kill
.
lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs membunuh
Kami tidak mendapatkan umpan balik visual. Dengan cara khas Linux, tidak ada berita adalah berita baik. Jika Anda ingin memeriksa bahwa proses telah dihentikan, Anda dapat menggunakan lsof
sekali lagi.
lsof -i tcp:7889
Karena lsof
tidak melaporkan apa pun, kami tahu tidak ada hubungan seperti itu.
Kami dapat menghapus proses menggunakan protokol UDP hanya dengan mengganti "tcp" dengan "udp" pada perintah kami sebelumnya.
lsof -i udp:7889 | awk '/7889/{print $2}' | xargs membunuh
Namun, lsof
tidak mengenali protokol SCTP.
lsof -i sctp:7889
Kita bisa menggunakan perintah ss
untuk melakukannya. Kami menggunakan opsi -S
(SCTP) untuk mencari soket SCTP, opsi -a
(semua) untuk mencari semua jenis soket (mendengarkan, menerima, terhubung, dll.), dan opsi -p
(proses) untuk membuat daftar detail proses menggunakan soket.
ss -Sap
Kita dapat mengurai output itu menggunakan grep
dan awk
. Kami juga dapat menguraikannya menggunakan grep
dan beberapa regex PERL, tetapi cara ini jauh lebih mudah dipahami. Jika Anda akan menggunakan ini lebih dari sekali atau dua kali, Anda mungkin akan membuat alias atau fungsi shell darinya.
Kita akan menyalurkan output dari ss
ke grep
dan mencari nomor port kita, 7889. Kita akan menyalurkan output dari grep
ke awk
. Dalam awk
, kami menggunakan opsi -F
(string pemisah) untuk menetapkan koma “ ,
” sebagai pembatas bidang. Kami mencari string yang berisi "pid=", dan mencetak bidang kedua yang dipisahkan koma dari string itu.
ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}'
Itu telah memberi kita string “pid=2859.”
Kita dapat menyalurkannya ke awk
lagi, mengatur pembatas bidang ke tanda sama dengan “ =
” dan mencetak bidang kedua dari string itu , yang akan menjadi teks di belakang tanda sama dengan.
ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'
Kami sekarang telah mengisolasi ID proses. Kita dapat menggunakan xargs
untuk meneruskan PID ke kill
sebagai parameter baris perintah.
ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs membunuh
Itu membunuh proses yang menggunakan soket protokol SCTP pada port 7889.
Perintah fuser
Perintah fuser
sangat menyederhanakan banyak hal. Kelemahannya adalah, ini hanya berfungsi dengan soket TCP dan UDP. Di sisi positifnya, itu adalah dua jenis soket paling umum yang harus Anda tangani. Perintah fuser
sudah terpasang di komputer Ubuntu, Fedora, dan Manjaro yang kami periksa.
Yang perlu Anda lakukan adalah menggunakan opsi -k
(kill), dan menyediakan port dan protokol. Anda dapat menggunakan opsi -n
(namespace) dan menyediakan protokol dan port, atau menggunakan "format pintasan garis miring" dan menempatkan nomor port terlebih dahulu.
fuser -n tcp 7889
fuser 7889/udp
Nomor port, protokol, dan PID dari proses yang dihentikan dicetak di jendela terminal.
Coba fuser dulu
Itu mungkin akan diinstal pada komputer yang sedang Anda kerjakan, dan protokolnya kemungkinan besar adalah TCP atau UDP, jadi ada kemungkinan besar cara paling sederhana akan berhasil untuk Anda.