GNU/Linux >> Belajar Linux >  >> Linux

Bunuh proses yang berjalan di port 80

Ada beberapa cara untuk menemukan proses berjalan mana yang menggunakan porta.

Menggunakan fuser akan memberikan PID dari beberapa instance yang terkait dengan port mendengarkan.

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

Setelah mengetahuinya, Anda dapat menghentikan atau mematikan proses tersebut.

Anda juga dapat menemukan PID dan detail lainnya menggunakan lsof

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

Untuk membatasi soket yang mendengarkan pada port 80 (berlawanan dengan klien yang terhubung ke port 80):

sudo lsof -i tcp:80 -s tcp:listen

Untuk membunuh mereka secara otomatis:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

Berikut adalah oneliner yang menunjukkan perintah untuk menjalankan :

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

Ganti echo oleh sudo untuk proses untuk benar-benar dibunuh.


Tiga opsi untuk mencantumkan port terbuka ditawarkan di whatisonport jsh :

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

Saya lebih suka netstat karena cepat, ringkas, dan dapat mencantumkan port yang dibuka oleh pengguna lain. (Meskipun masih memerlukan hak pengguna super/pengguna untuk mencantumkan nama dan PID dari proses tersebut.)

Keluaran

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

Penggunaan grep dalam dua kasus adalah mencocokkan hanya port di sisi lokal, dan melewatkan koneksi terbuka ke port jarak jauh 80. (Alternatifnya adalah menggunakan -l dengan netstat , atau dengan lsof untuk menggunakan -sTCP:LISTEN , tapi saya suka greps di atas karena mereka juga akan menangkap outgoing koneksi dari port yang diberikan, yang terkadang menarik.)

Dengan lsof kami menggunakan -P untuk menampilkan :80 bukannya :http untuk memungkinkan grep. -S 2 opsi memaksa lsof untuk menyelesaikan tepat waktu.

Membunuh proses

Dengan asumsi kita ingin menggunakan netstat , kita dapat mengambil PID seperti ini:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

Dan kami bahkan dapat meneruskan PID tersebut ke kill :

... | xargs -d '\n' kill -KILL

Namun sering ada potensi false positive saat menggunakan regexps, jadi saya akan merekomendasikan hanya melihat output awal dari netstat lalu secara manual memutuskan apakah akan menjalankan atau tidak:

$ kill -KILL 1914

Lihat juga

Saya memiliki skrip lain bernama listopenports yang mungkin menarik.


Linux
  1. Ubah Lingkungan Proses yang Berjalan?

  2. Proses Keturunan?

  3. Bagaimana Cara Membunuh Proses yang Berjalan pada Port Tertentu di Linux?

  1. Cara mematikan proses zombie di Linux

  2. Bagaimana saya bisa mematikan TCP port 16969 di Bash?

  3. Menemukan PID dari proses menggunakan port tertentu?

  1. Linux – Menemukan Pid Proses Menggunakan Port Tertentu?

  2. Cara Membunuh Proses yang Berjalan di Linux

  3. bunuh Contoh Perintah di Linux