Jawaban:
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
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.
echo
untuksudo
80
.
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 netstat
karena 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.)
$ 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 untuk mencocokkan hanya port di sisi lokal, dan melewatkan koneksi terbuka ke port jarak jauh 80. (Alternatif akan digunakan -l
dengan netstat
, atau dengan lsof
menggunakan -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 lsof
kita gunakan -P
untuk menampilkan :80
bukan :http
untuk memungkinkan grep. The -S 2
pasukan pilihan lsof
untuk menyelesaikan secara tepat waktu.
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 netstat
dan kemudian secara manual memutuskan apakah akan berjalan atau tidak:
$ kill -KILL 1914
Saya memiliki skrip lain yang disebut listopenports
yang mungkin menarik.
Anda sudah menemukan proses untuk dibunuh: nomor prosesnya 20570
dan binernya memiliki nama httpd
seperti yang tertulis di akhir baris keluaran netstat
. Anda dapat membunuhnya dengan nomor kill 20570
atau nama killall httpd
tetapi 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 httpd
dan man httpd
harus 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 Center
bawah System
dan 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-all
mengembalikan daftar semua layanan yang service
tahu dan dapat menangani. Pintasan untuk memulai kembali suatu layanan (yaitu: berhenti dan mulai dengan urutan itu) adalah service --full-restart SERVICE
dengan SERVICE
menjadi nama layanan, misalnya .: httpd
dalam kasus Apache.
Sebagian besar program yang Anda temukan netstat
dapat ditangani dengan cara itu. Beberapa tidak dapat dan beberapa bahkan tidak memiliki halaman manual tetapi jarang.
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
killall
tanpa penjelasan atau peringatan.
-k
saklar untuk membunuh semua proses pencocokan, dan-i
untuk membunuh secara interaktif (meminta Anda untuk masing-masing).