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?

Jawaban:


164

Ini mungkin bisa membantu

lsof -n -i4TCP:8080 

PID adalah kolom kedua di keluaran.

Atau coba:

lsof -i -P

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)

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


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.


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


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


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.


1

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


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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.