Làm thế nào tôi có thể giết bất kỳ quá trình nào đang sử dụng cổng 8080 để tôi có thể đi lang thang?


93

Trên MacOSX, tôi đang sử dụng Packer để xây dựng một hộp Vagrant nên tôi cần liên tục đưa nó lên và chia nhỏ nó. Tôi đang cố gắng 'đi lang thang' và nhận được lỗi tiêu chuẩn do cổng đang được sử dụng:

"Vagrant không thể chuyển tiếp các cổng được chỉ định trên máy ảo này, vì chúng sẽ va chạm với một số ứng dụng khác đang lắng nghe trên các cổng này. Cổng chuyển tiếp tới 8080 đã được sử dụng trên máy chủ."

Giải pháp có vẻ đủ đơn giản: Tôi chỉ cần xác định quá trình đang giữ cổng 8080 mở và hủy quá trình đó, phải không ?. Nó không dễ như thế đâu.


Nếu tôi chạy lệnh:

nmap localhost -p 8080

Tôi nhận được kết quả sau:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nếu tôi chạy lệnh sau:

top -o prt

Cổng cao nhất được sử dụng vào năm 1360


Nếu tôi chạy lệnh sau:

 netstat -tulpn | grep :8080

Tôi nhận:

netstat: n: unknown or uninstrumented protocol

Nếu tôi chạy lệnh sau:

lsof -i :8080

Tôi không nhận được đầu ra


Nếu tôi khởi động lại máy tính của mình, cổng hiện đã khả dụng và bây giờ tôi có thể 'đi lang thang'.

Làm cách nào tôi có thể loại bỏ bất kỳ quá trình nào đang sử dụng cổng 8080 để tôi có thể hoạt động mà không cần khởi động lại máy tính của mình?

Câu trả lời:


165

Điều này có thể giúp

lsof -n -i4TCP:8080 

PID là trường thứ hai trong đầu ra.

Hay là thử:

lsof -i -P

Cảm ơn bạn đã thử, nhưng tôi đã nêu trong câu hỏi của mình rằng tôi không nhận được kết quả nào từ lệnh lsof.
Jason Curran

Tôi đã thêm một khả năng khác.
Mark Setchell

Bạn có tình cờ có máy in HP LaserJet không? blog.hgomez.net/blog/2010/09/25/...
Đánh dấu Setchell

3
Cảm ơn Mark! Vì bất kỳ lý do gì, sau khi khởi động lại máy tính của tôi, các lệnh lsof không xuất ra kết quả gì, và bây giờ là như vậy. Bây giờ, tất cả 3 trong số các lệnh lsof đang hoạt động và tôi có thể xác định id quy trình và hủy nó bằng: sudo kill -9 000 ... Trong đó 000 là id quy trình. Tên của quá trình là "VBoxHeadless". Nếu tôi biết thêm thông tin về lý do tại sao nó không hoạt động trước đây, tôi sẽ báo cáo lại. FYI: Tôi không có máy in nào được đính kèm.
Jason Curran

Cố gắng sudo lsof -n -i4TCP:8080chọn các quy trình do người chủ sở hữu.
mpelzsherman

91

Giải pháp nhanh chóng và nhanh chóng:

lsof -n -i4TCP:8080

PIDlà lĩnh vực thứ hai. Sau đó, giết quá trình đó:

kill -9 PID

Ít nhanh hơn nhưng giải pháp lâu dài

  1. Đi tới /usr/local/bin/ (Có thể sử dụng lệnh + shift + g trong trình tìm kiếm)

  2. Tạo một tệp có tên stop. Dán mã dưới đây vào đó:

#!/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. Lưu tệp này.
  2. Làm cho tệp thực thi được chmod 755 stop
  3. Bây giờ, hãy vào terminal và viết stop 8888(hoặc bất kỳ cổng nào)

4
Tôi đã thử giải pháp vĩnh viễn nhưng bị 'Quyền bị từ chối' khi cố gắng chạy tập lệnh. Giải quyết bằng cách chạy đầu tiên chmod 755 stop.
nomadoda

32

Trong trường hợp câu trả lời được chấp nhận ở trên không hoạt động, hãy thử giải pháp bên dưới. Bạn có thể sử dụng nó cho cổng 8080 hoặc cho bất kỳ cổng nào khác.

sudo lsof -i tcp:3000 

Thay thế 3000 bằng bất kỳ cổng nào bạn muốn. Chạy lệnh dưới đây để kết thúc quá trình đó.

sudo kill -9 PID

PID là ID tiến trình bạn muốn hủy.

Dưới đây là kết xuất của các lệnh trên mac Terminal.

Đầu ra lệnh


1
Tôi sẽ thử giết thường (không phải -9) trước. Tùy chọn -9 có thể dẫn đến việc ổ cắm không được đóng đúng cách. Quy trình có thể bị hủy nhưng một trình nghe khác sẽ được tách ra ở vị trí của nó.
stackPusher

6

Để viết kịch bản này:

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

Đối -tsố làm cho đầu ra của lsof "terse" có nghĩa là nó chỉ trả về PID.


1
bạn có thể làm cho nó hoạt động quá mà mất $ port
mebada

Cuối cùng là một giải pháp lấy PID trực tiếp. Cảm ơn anh bạn, sẽ là câu trả lời chính xác cho chủ đề này
Olympiloutre

3

Tôi cần chạy lệnh này

sudo lsof -i :80 # checks port 8080

Sau đó, tôi có

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)

hiển thị dịch vụ nào đang sử dụng PID

ps -ef 312

Sau đó, tôi có cái này

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

Để gỡ cài đặt, hãy chạy tác nhân bảo mật web cisco

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

tín dụng cho: http://tobyaw.livejournal.com/315396.html


2

Nó có thể là Cisco AnyConnect. Kiểm tra xem /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist có tồn tại hay không. Sau đó dỡ bỏ nó bằng launcherctl và xóa khỏi / Library / LaunchDaemons


2
sudo lsof -i:8080

Bằng cách chạy lệnh trên, bạn có thể thấy tất cả các công việc đang chạy.

kill -9 <PID Number>

Nhập PID (số nhận dạng quy trình), vì vậy điều này sẽ kết thúc / kết thúc phiên bản.


1

Bạn cũng có thể sử dụng Trình theo dõi hoạt động để xác định và thoát khỏi quy trình bằng cổng.


1
Làm thế nào tôi sẽ làm điều đó?
Emil Stenström

Trên MacOSX: Activity Monitor> Network> sắp xếp theo PID> tìm cổng bị chặn của bạn (ví dụ: 8080, 5000, v.v.)> nhấp vào 'X' trên cùng bên trái> xác nhận bạn muốn thoát khỏi quy trình. Có thể là một ý tưởng hay để chỉnh sửa cấu hình chạy / xây dựng của bạn để đảm bảo chỉ có thể tạo các phiên bản máy chủ duy nhất, tức là các cổng đã sử dụng của bạn được giải phóng khi xé nhỏ.
Alex Friedmann,

1

Chạy: nmap -p 8080 localhost(Cài đặt nmap với MacPorts hoặc Homebrew nếu bạn chưa có trên hệ thống của mình)

Báo cáo quét Nmap cho localhost (127.0.0.1)

Máy chủ lưu trữ đã tăng (độ trễ 0,00034 giây).

Các địa chỉ khác cho localhost (không được quét): :: 1

DỊCH VỤ NHÀ NƯỚC CỔNG

8080 / tcp mở http-proxy

Chạy: ps -ef | grep http-proxy

UID PID PPID C STIME TTY TIME CMD

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

Chạy: ps -ef 640(thay thế 501 bằng UID của bạn)

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

Cổng 8080 trên mac osx được sử dụng bởi thứ gì đó được cài đặt với XCode SDK


1

Sử dụng lệnh sau:

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

Id tiến trình của cổng 8080 sẽ được chọn và loại bỏ cưỡng bức bằng cách sử dụng kill -9.


0

thử netstat

netstat -vanp tcp | grep 3000

nếu netstat của bạn không hỗ trợ -p, hãy sử dụng lsof

sudo lsof -i tcp:3000 

Để sử dụng Centos 7

netstat -vanp --tcp | grep 3000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.