Bagaimana saya bisa mematikan proses apa pun yang menggunakan port 8080 sehingga saya bisa gelandangan?

93

Di MacOSX, saya menggunakan Packer untuk membuat kotak Vagrant jadi saya harus terus mengangkat dan merobohkannya. Saya mencoba untuk 'gelandangan', dan menerima kesalahan standar karena port sedang digunakan:

"Vagrant tidak dapat meneruskan port yang ditentukan pada VM ini, karena akan bertabrakan dengan beberapa aplikasi lain yang sudah mendengarkan pada port ini. Port yang diteruskan ke 8080 sudah digunakan pada mesin host."

Solusinya tampaknya cukup sederhana: Saya hanya perlu mengidentifikasi proses yang menahan port 8080 terbuka dan menghentikan proses itu, bukan ?. Ini tidak semudah itu.


Jika saya menjalankan perintah:

nmap localhost -p 8080

Saya menerima keluaran berikut:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Jika saya menjalankan perintah berikut:

top -o prt

Port tertinggi digunakan pada tahun 1360


Jika saya menjalankan perintah berikut:

 netstat -tulpn | grep :8080

Saya menerima:

netstat: n: unknown or uninstrumented protocol

Jika saya menjalankan perintah berikut:

lsof -i :8080

Saya tidak menerima keluaran


Jika saya me-restart komputer saya, port tersebut sekarang tersedia dan saya sekarang bisa 'gelandangan'.

Bagaimana saya dapat mematikan proses apa pun yang menggunakan port 8080 sehingga saya dapat menggeledah tanpa me-restart komputer saya?

Jason Curran
sumber

Jawaban:

164

Ini mungkin bisa membantu

lsof -n -i4TCP:8080 

PID adalah kolom kedua di keluaran.

Atau coba:

lsof -i -P
Mark Setchell
sumber
Terima kasih telah mencoba, tetapi saya menyatakan dalam pertanyaan saya bahwa saya tidak menerima output dari perintah lsof.
Jason Curran
Saya telah menambahkan kemungkinan lain.
Mark Setchell
Apakah Anda kebetulan memiliki pencetak HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
Mark Setchell
3
Terima kasih Mark! Untuk alasan apa pun, setelah me-restart komputer saya, perintah lsof tidak menghasilkan apa-apa, dan sekarang sudah. Sekarang, semua 3 dari perintah lsof berfungsi dan saya dapat mengidentifikasi id proses dan membunuhnya dengan: sudo kill -9 000 ... Di mana 000 adalah id proses. Nama prosesnya adalah "VBoxHeadless". Jika saya mendapatkan informasi lebih lanjut tentang mengapa itu tidak berfungsi sebelumnya, saya akan melaporkannya kembali. FYI: Saya tidak memasang printer.
Jason Curran
Cobalah sudo lsof -n -i4TCP:8080untuk mengambil proses yang dimiliki oleh root.
mpelzsherman
90

Solusi cepat dan cepat:

lsof -n -i4TCP:8080

PIDadalah bidang kedua. Kemudian, akhiri proses itu:

kill -9 PID

Solusi kurang cepat tapi permanen

  1. Pergi ke /usr/local/bin/ (Dapat menggunakan perintah + shift + g di finder)

  2. Buat file bernama stop. Tempel kode di bawah ini di dalamnya:

#!/bin/bash
touch temp.text
lsof -n -i4TCP:$1 | awk '{print $2}' > temp.text
pidToStop=`(sed '2q;d' temp.text)`
> temp.text
if [[ -n $pidToStop ]]
then
kill -9 $pidToStop
echo "Congrates!! $1 is stopped."
else
echo "Sorry nothing running on above port"
fi
rm temp.text
  1. Simpan file ini.
  2. Buat file tersebut dapat dieksekusi chmod 755 stop
  3. Sekarang, pergi ke terminal dan tulis stop 8888(atau port manapun)
ronak kothari
sumber
4
Saya mencoba solusi permanen tetapi mendapat 'Izin ditolak' ketika mencoba menjalankan skrip. Diselesaikan dengan menjalankan pertama kali chmod 755 stop.
nomadoda
32

Jika jawaban yang diterima di atas tidak berfungsi, coba solusi di bawah ini. Anda dapat menggunakannya untuk port 8080 atau untuk port lain.

sudo lsof -i tcp:3000 

Ganti 3000 dengan port mana pun yang Anda inginkan. Jalankan perintah di bawah ini untuk menghentikan proses itu.

sudo kill -9 PID

PID adalah ID proses yang ingin Anda matikan.

Di bawah ini adalah output dari perintah di Terminal mac.

Keluaran perintah

Akshay Thorve
sumber
1
Saya akan mencoba membunuh biasa (bukan -9) dulu. Opsi -9 dapat menyebabkan soket tidak ditutup dengan benar. Prosesnya mungkin terhenti tetapi pendengar lain akan bercabang menggantikannya.
stackPusher
6

Untuk membuat skrip ini:

pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
  kill -9 $pid
fi

The -tArgumen membuat output dari lsof "singkat" yang berarti bahwa ia hanya mengembalikan PID.

voutasaurus
sumber
1
Anda dapat membuatnya berfungsi juga yang membutuhkan $ port
mebada
Akhirnya solusi yang mendapatkan PID secara langsung. Terima kasih
kawan
3

Saya perlu menjalankan perintah ini

sudo lsof -i :80 # checks port 8080

Lalu saya dapat

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
acwebseca 312 root   36u  IPv4 0x34ae935da20560c1      0t0  TCP 192.168.1.3:50585->104.25.53.12:http (ESTABLISHED)

menunjukkan layanan mana yang menggunakan PID

ps -ef 312

Lalu aku dapat ini

  UID   PID  PPID   C STIME   TTY           TIME CMD
    0   312    58   0  9:32PM ??         0:02.70 /opt/cisco/anyconnect/bin/acwebsecagent -console

Untuk menghapus instalan agen keamanan web cisco, jalankan

sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

kredit untuk: http://tobyaw.livejournal.com/315396.html

mjabadilla.dll
sumber
2

Ini bisa berupa Cisco AnyConnect. Periksa apakah /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist ada. Kemudian bongkar dengan launchctl dan hapus dari / Library / LaunchDaemons

Andriy Sylka
sumber
2
sudo lsof -i:8080

Dengan menjalankan perintah di atas Anda dapat melihat semua pekerjaan yang sedang berjalan.

kill -9 <PID Number>

Masukkan PID (nomor identifikasi proses), jadi ini akan menghentikan / mematikan instance.

Viswesvar Sekar
sumber
1

Anda juga dapat menggunakan Monitor Aktivitas untuk mengidentifikasi dan keluar dari proses menggunakan port.

gcmori.dll
sumber
1
Bagaimana saya melakukannya?
Emil Stenström
Di MacOSX: Monitor Aktivitas> Jaringan> urutkan berdasarkan PID> temukan port yang diblokir (mis. 8080, 5000 dll)> klik 'X' di kiri atas> konfirmasi bahwa Anda ingin keluar dari proses. Sebaiknya edit konfigurasi run / build Anda untuk memastikan hanya instance server tunggal yang dapat dibuat, yaitu port yang Anda gunakan dibebaskan saat pembongkaran.
Alex Friedmann
1

Jalankan: nmap -p 8080 localhost(Instal nmap dengan MacPorts atau Homebrew jika Anda belum memilikinya di sistem Anda)

Laporan pemindaian Nmap untuk localhost (127.0.0.1)

Host sudah habis (latensi 0,00034s).

Alamat lain untuk localhost (tidak dipindai): :: 1

LAYANAN NEGARA PELABUHAN

8080 / tcp buka http-proxy

Lari: ps -ef | grep http-proxy

UID PID PPID C STIME TTY TIME CMD

640 99335 88310 0 12:26 ttys002 0: 00.01 grep http-proxy "

Jalankan: ps -ef 640(ganti 501 dengan UID Anda)

/System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd

Port 8080 di mac osx digunakan oleh sesuatu yang diinstal dengan XCode SDK

Yiling
sumber
1

Gunakan perintah berikut:

lsof -n -i4TCP:8080 | awk '{print$2}' | xargs kill -9

ID proses port 8080 akan diambil dan dimatikan dengan paksa menggunakan kill -9.

Suniti
sumber
0

coba netstat

netstat -vanp tcp | grep 3000

jika netstat Anda tidak mendukung -p, gunakan lsof

sudo lsof -i tcp:3000 

Untuk penggunaan Centos 7

netstat -vanp --tcp | grep 3000
khem raj regmi
sumber