Matikan proses yang berjalan pada port 80

14

Ini adalah proses yang ingin saya bunuh:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd
Sooraj S
sumber

Jawaban:

31

Ada beberapa cara untuk menemukan proses yang sedang berjalan menggunakan port.

Menggunakan fuser itu akan memberikan PID (s) 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 membunuh prosesnya.

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 pada soket yang mendengarkan pada port 80 (berbeda 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
Rui F Ribeiro
sumber
1
Saya ingin menunjukkan bahwa fuser juga memiliki -ksaklar untuk membunuh semua proses pencocokan, dan -iuntuk membunuh secara interaktif (meminta Anda untuk masing-masing).
A. Wilcox
7

Berikut adalah oneliner yang menunjukkan perintah untuk menjalankan:

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

Ganti echooleh sudountuk proses untuk benar-benar dibunuh.

Jlliagre
sumber
Ganti echountuksudo
EliuX
Ini adalah jawaban sempurna yang harus kita ganti dengan nomor port 80.
Youssof H.
4

Tiga opsi untuk daftar port terbuka ditawarkan dalam jsh 's whatisonport:

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

fuser -v "${PORT}"/tcp

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

Saya lebih suka netstatkarena cepat, ringkas, dan bisa daftar port yang dibuka oleh pengguna lain. (Meskipun masih akan membutuhkan hak pengguna super / pengguna untuk mendaftar 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 grepdalam dua kasus adalah untuk mencocokkan hanya port di sisi lokal, dan melewatkan koneksi terbuka ke port jarak jauh 80. (Alternatif akan digunakan -ldengan netstat, atau dengan lsofmenggunakan -sTCP:LISTEN, tapi saya suka greps di atas karena mereka akan juga menangkap koneksi keluar dari port yang diberikan, yang kadang-kadang mungkin menarik.)

Dengan lsofkita gunakan -Puntuk menampilkan :80bukan :httpuntuk memungkinkan grep. The -S 2pasukan pilihan lsofuntuk menyelesaikan secara tepat waktu.

Membunuh prosesnya

Dengan asumsi kami ingin menggunakan netstat, kami 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 ketika menggunakan regexps, jadi saya akan merekomendasikan hanya melihat output awal netstatdan kemudian secara manual memutuskan apakah akan berjalan atau tidak:

$ kill -KILL 1914

Lihat juga

Saya memiliki skrip lain yang disebut listopenportsyang mungkin menarik.

joeytwiddle
sumber
3

Anda sudah menemukan proses untuk dibunuh: nomor prosesnya 20570dan binernya memiliki nama httpdseperti yang tertulis di akhir baris keluaran netstat. Anda dapat membunuhnya dengan nomor kill 20570atau nama killall httpdtetapi saya tidak akan merekomendasikan untuk melakukannya dengan cara itu.

Port yang lebih rendah dari 1024 memiliki penggunaan standar (biasanya), Anda dapat melihatnya dan banyak lainnya less /etc/services. Entri untuk port 80 bahkan berkomentar:

http            80/tcp          www             # WorldWideWeb HTTP

Jadi kemungkinan besar server web. Nama yang Anda miliki adalah httpddan man httpdharus memberi Anda petunjuk besar bahwa itu adalah biner Apache yang cocok. Apache adalah salah satu pemain besar, ia memiliki beberapa program manajemen yang nyaman tetapi Anda tidak memerlukannya hanya untuk memulai / menghentikan tindakan.

Anda punya Mint? Dengan desktop normal? Kemudian lihat di Control Centerbawah Systemdan klik Services. Anda harus menjadi admin untuk melakukan apa pun di sana. Gulir ke bawah hingga Anda menemukan sesuatu yang berlabel "server web" (Saya menggunakan lighttpd bukan Apache dan tidak tahu persis seperti apa tampilan Apache) dan hapus centang.

Jika Anda hanya ingin menghentikannya, cobalah untuk sementara waktu, di konsol

sudo service stop httpd

dan mulai dengan sudo service start httpd. service --status-allmengembalikan daftar semua layanan yang servicetahu dan dapat menangani. Pintasan untuk memulai kembali suatu layanan (yaitu: berhenti dan mulai dengan urutan itu) adalah service --full-restart SERVICEdengan SERVICEmenjadi nama layanan, misalnya .: httpddalam kasus Apache.

Sebagian besar program yang Anda temukan netstatdapat ditangani dengan cara itu. Beberapa tidak dapat dan beberapa bahkan tidak memiliki halaman manual tetapi jarang.

deamentiaemundi
sumber
0

Ada cara sederhana untuk melakukan ini. Pertama periksa proses mana yang menggunakan port 80 oleh netstat :

netstat -ntl | grep 80

Sekarang Anda mendapatkan nama proses dan membunuh proses dengan perintah killall :

killall -9 process name
amit singh
sumber
Apa bahaya menggunakan perintah 'killall'?
Peter Mortensen
2
-1 untuk killalltanpa penjelasan atau peringatan.
guntbert
1
Ada beberapa masalah dengan killall. Selain dapat membawa ke sistem berlutut jika terjadi masalah, juga dapat membunuh banyak contoh dari proses yang tidak terkait dengan port. Di atas semuanya, masalah terbesar dari killall adalah bahwa jika seseorang dalam kotak Solaris mencoba menggunakannya, itu akan membunuh semua proses yang berjalan.
Rui F Ribeiro