ฉันจะฆ่ากระบวนการใด ๆ ที่ใช้พอร์ต 8080 เพื่อให้ฉันเร่ร่อนได้อย่างไร


93

ใน MacOSX ฉันใช้ Packer เพื่อสร้างกล่อง Vagrant ดังนั้นฉันจึงต้องนำมันขึ้นมาอย่างต่อเนื่องและฉีกมันลง ฉันกำลังพยายามที่จะ 'vagrant up' และได้รับข้อผิดพลาดมาตรฐานเนื่องจากมีการใช้พอร์ต:

"Vagrant ไม่สามารถส่งต่อพอร์ตที่ระบุบน VM นี้ได้เนื่องจากจะชนกับแอปพลิเคชันอื่น ๆ ที่รับฟังพอร์ตเหล่านี้อยู่แล้วพอร์ตที่ส่งต่อไปยัง 8080 ถูกใช้งานบนเครื่องโฮสต์แล้ว"

วิธีแก้ปัญหาดูเหมือนง่ายพอ: ฉันแค่ต้องระบุกระบวนการที่เปิดพอร์ต 8080 และฆ่ากระบวนการนั้นใช่ไหม. มันไม่ง่ายอย่างนั้น


ถ้าฉันรันคำสั่ง:

nmap localhost -p 8080

ฉันได้รับผลลัพธ์ต่อไปนี้:

PORT     STATE SERVICE
8080/tcp open  http-proxy

หากฉันรันคำสั่งต่อไปนี้:

top -o prt

พอร์ตสูงสุดที่ใช้งานในปี 1360


หากฉันรันคำสั่งต่อไปนี้:

 netstat -tulpn | grep :8080

ฉันได้รับ:

netstat: n: unknown or uninstrumented protocol

หากฉันรันคำสั่งต่อไปนี้:

lsof -i :8080

ฉันไม่ได้รับผลลัพธ์


ถ้าฉันรีสตาร์ทคอมพิวเตอร์พอร์ตจะพร้อมใช้งานและตอนนี้ฉันสามารถ 'ร่อนเร่' ได้แล้ว

ฉันจะฆ่ากระบวนการใดก็ตามที่ใช้พอร์ต 8080 เพื่อให้ฉันสามารถเร่ร่อนโดยไม่ต้องรีสตาร์ทคอมพิวเตอร์ได้อย่างไร

คำตอบ:


164

สิ่งนี้อาจช่วยได้

lsof -n -i4TCP:8080 

PID เป็นฟิลด์ที่สองในเอาต์พุต

หรือลอง:

lsof -i -P

ขอบคุณที่พยายาม แต่ฉันระบุในคำถามของฉันว่าฉันไม่ได้รับผลลัพธ์จากคำสั่ง lsof
Jason Curran

ฉันได้เพิ่มความเป็นไปได้อื่น
Mark Setchell

คุณมีเครื่องพิมพ์ HP LaserJet หรือไม่? blog.hgomez.net/blog/2010/09/25/…
Mark Setchell

3
ขอบคุณมาร์ค! ไม่ว่าด้วยเหตุผลใดก็ตามหลังจากรีสตาร์ทคอมพิวเตอร์คำสั่ง lsof ไม่ได้ส่งผลอะไรเลยและตอนนี้ก็เป็นเช่นนั้น ตอนนี้ทั้ง 3 คำสั่ง lsof ใช้งานได้และฉันสามารถระบุรหัสกระบวนการและฆ่ามันด้วย: sudo kill -9000 ... โดยที่ 000 คือรหัสกระบวนการ ชื่อของกระบวนการคือ "VBoxHeadless" หากฉันได้รับข้อมูลเพิ่มเติมว่าเหตุใดจึงใช้งานไม่ได้ก่อนหน้านี้ฉันจะรายงานกลับ FYI: ฉันไม่มีเครื่องพิมพ์ติดอยู่
Jason Curran

พยายามsudo lsof -n -i4TCP:8080เลือกกระบวนการที่เป็นของรูท
mpelzsherman

91

วิธีแก้ปัญหาที่รวดเร็วและรวดเร็ว:

lsof -n -i4TCP:8080

PIDเป็นฟิลด์ที่สอง จากนั้นฆ่ากระบวนการนั้น:

kill -9 PID

โซลูชันที่รวดเร็วน้อยลง แต่ถาวร

  1. ไปที่/usr/local/bin/ (สามารถใช้คำสั่ง + shift + g ใน Finder)

  2. สร้างไฟล์ชื่อstop. วางโค้ดด้านล่างลงไป:

#!/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. บันทึกไฟล์นี้
  2. ทำให้ไฟล์ปฏิบัติการได้ chmod 755 stop
  3. ตอนนี้ไปที่เทอร์มินัลแล้วเขียนstop 8888(หรือพอร์ตใด ๆ )

4
ฉันลองใช้วิธีแก้ปัญหาแบบถาวร แต่ได้รับ 'การอนุญาตถูกปฏิเสธ' เมื่อพยายามเรียกใช้สคริปต์ chmod 755 stopแก้ไขได้โดยการทำงานครั้งแรก
nomadoda

32

ในกรณีที่คำตอบที่ยอมรับข้างต้นไม่ได้ผลให้ลองใช้วิธีแก้ปัญหาด้านล่าง คุณสามารถใช้สำหรับพอร์ต 8080 หรือสำหรับพอร์ตอื่น ๆ

sudo lsof -i tcp:3000 

แทนที่ 3000 ด้วยพอร์ตใดก็ได้ที่คุณต้องการ เรียกใช้คำสั่งด้านล่างเพื่อฆ่ากระบวนการนั้น

sudo kill -9 PID

PID คือรหัสกระบวนการที่คุณต้องการฆ่า

ด้านล่างนี้คือผลลัพธ์ของคำสั่งบน mac Terminal

เอาต์พุตคำสั่ง


1
ฉันจะลองฆ่าปกติ (ไม่ใช่ -9) ก่อน ตัวเลือก -9 อาจทำให้ซ็อกเก็ตปิดไม่สนิท กระบวนการนี้อาจถูกฆ่า แต่ผู้ฟังอีกคนจะแยกออกจากกัน
stackPusher

6

ในการเขียนสคริปต์นี้:

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

-tอาร์กิวเมนต์ทำให้การส่งออกของ lsof "สั้น" ซึ่งหมายความว่ามันจะแสดงผลเป็นกํา


1
คุณอาจทำให้มันทำงานได้เช่นกันโดยใช้ $ port
mebada

ในที่สุดวิธีแก้ปัญหาที่ได้รับ PID โดยตรง ขอบคุณมากน่าจะเป็นคำตอบที่ถูกต้องสำหรับหัวข้อนี้
Olympiloutre

3

ฉันต้องการเรียกใช้คำสั่งนี้

sudo lsof -i :80 # checks port 8080

แล้วฉันก็ได้

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)

แสดงว่าบริการใดกำลังใช้ PID

ps -ef 312

จากนั้นฉันก็ได้สิ่งนี้

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

ในการถอนการติดตั้ง cisco web security agent ให้รัน

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

เครดิตไปที่: http://tobyaw.livejournal.com/315396.html


2

สามารถเป็น Cisco AnyConnect ตรวจสอบว่ามี /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist หรือไม่ จากนั้นยกเลิกการโหลดด้วย launchctl และลบจาก / Library / LaunchDaemons


2
sudo lsof -i:8080

ด้วยการเรียกใช้คำสั่งด้านบนคุณจะเห็นว่างานทั้งหมดกำลังทำงานอยู่

kill -9 <PID Number>

ป้อน PID (หมายเลขประจำตัวกระบวนการ) ดังนั้นสิ่งนี้จะยุติ / ฆ่าอินสแตนซ์


1

คุณยังสามารถใช้ตัวตรวจสอบกิจกรรมเพื่อระบุและออกจากกระบวนการโดยใช้พอร์ต


1
ฉันจะทำอย่างไร
Emil Stenström

บน MacOSX: ตัวตรวจสอบกิจกรรม> เครือข่าย> จัดเรียงตาม PID> ค้นหาพอร์ตที่ถูกบล็อกของคุณ (เช่น 8080, 5000 เป็นต้น)> คลิกซ้ายบน 'X'> ยืนยันว่าคุณต้องการออกจากกระบวนการ อาจเป็นความคิดที่ดีในการแก้ไขการกำหนดค่าการรัน / บิลด์ของคุณเพื่อให้แน่ใจว่าสามารถสร้างอินสแตนซ์เซิร์ฟเวอร์เดียวเท่านั้นกล่าวคือพอร์ตที่คุณใช้จะได้รับอิสระ
Alex Friedmann

1

เรียกใช้: nmap -p 8080 localhost(ติดตั้ง nmap ด้วย MacPorts หรือ Homebrew หากคุณยังไม่มีในระบบของคุณ)

รายงานการสแกน Nmap สำหรับ localhost (127.0.0.1)

โฮสต์หมดแล้ว (เวลาแฝง 0.00034 วินาที)

ที่อยู่อื่นสำหรับ localhost (ไม่ได้สแกน): :: 1

บริการ PORT STATE

8080 / tcp เปิด http-proxy

วิ่ง: 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 "

เรียกใช้: ps -ef 640(แทนที่ 501 ด้วย UID ของคุณ)

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

พอร์ต 8080 บน mac osx ถูกใช้โดยสิ่งที่ติดตั้ง XCode SDK


1

ใช้คำสั่งต่อไปนี้:

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

กระบวนการ id พอร์ต 8080 kill -9จะได้รับเลือกและถูกฆ่าตายอย่างแข็งขันโดยใช้


0

ลอง netstat

netstat -vanp tcp | grep 3000

หาก netstat ของคุณไม่รองรับ -p ให้ใช้ lsof

sudo lsof -i tcp:3000 

สำหรับ Centos 7 ใช้

netstat -vanp --tcp | grep 3000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.