Cara Membunuh Proses Linux dengan Nomor Port

Diterbitkan: 2022-10-08
Laptop Linux menampilkan prompt bash
fatmawati achmad zaenuri/Shutterstock.com

Untuk 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.

Cara Membunuh Proses Dari Terminal Linux
TERKAIT Cara Membunuh Proses Dari Terminal Linux

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 

Menginstal socat di Ubuntu

Di Fedora gunakan dnf :

 sudo dnf instal socat 

Menginstal socat di Fedora

Di Manjaro Anda perlu mengetik:

 sudo pacman -S socat 

Menginstal socat di Manjaro

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 & 

Membuat koneksi soket TCP yang mendengarkan dengan socat

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 & 

Membuat koneksi soket UDP dan SCTP yang mendengarkan dengan socat

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 

Menggunakan lsof untuk menampilkan detail proses menggunakan port dan protokol tertentu

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}' 

Piping output dari lsof ke awk

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 

Menggunakan pipa untuk mengambil output dari lsof ke awk dan dari awk ke xargs dan 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 

Menggunakan lsof untuk mencari detail proses menggunakan port dan protokol tertentu tanpa berhasil

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 

Menggunakan pipa untuk mengambil output dari lsof ke awk dan dari awk ke xargs dan membunuh, untuk soket UDP

Namun, lsof tidak mengenali protokol SCTP.

 lsof -i sctp:7889 

lsof tidak bekerja dengan protokol SCTP

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 

Mencetak detail proses menggunakan soket SCTP dengan ss

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}' 

Menggunakan pipa untuk menghubungkan ss, grep, dan awk untuk mengekstrak string PID

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}' 

Menggunakan pipa untuk menghubungkan ss, grep, dan awk dua kali, untuk mengekstrak PID

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 

Menggunakan pipa dengan ss, grep, awk, dan xargs untuk menghentikan proses soket SCTP

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 

Menggunakan perintah fuser untuk menghapus proses menggunakan soket TCP dan 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.