Giải phóng cổng TCP / IP?


146

netstat -tulnap cho tôi thấy những cổng nào đang được sử dụng Làm thế nào để giải phóng một cổng trong Linux?

Câu trả lời:


214

Như những người khác đã nói, bạn sẽ phải giết tất cả các quy trình đang lắng nghe trên cổng đó. Cách dễ nhất để làm điều đó là sử dụng lệnh fuser (1). Ví dụ: để xem tất cả các quy trình lắng nghe yêu cầu http trên cổng 80 (chạy dưới quyền root hoặc sử dụng sudo):

# fuser 80/tcp

Nếu bạn muốn giết chúng, thì chỉ cần thêm tùy chọn -k.


1
Tôi thấy rằng việc gửi một yêu cầu tới cổng cũng làm sạch nó (mặc dù tôi không phải là chuyên gia linux)
Matej

1
Để cài đặt fuser trên Debian: sudo apt-get install psmisc ( bitflop.com/document/107 )
Korneel 18/03/2016

1
Nó đã hoạt động, nhưng tôi cũng phải cài đặt psmisc trên CentOs 7 ( sudo yum install psmisc)
Marlon Bernardes

1
kill -9 $(fuser 80/tcp 2>/dev/null)
Hanynowsky

76

Để tiêu diệt một cổng cụ thể trong Linux, hãy sử dụng lệnh bên dưới

sudo fuser -k Port_Number/tcp

thay thế Port_Number bằng cổng bị chiếm đóng của bạn.


6
Điều này thực sự giết chết quá trình mở cổng chứ không phải chính cổng.
vinayc

16

Bạn có thể sử dụng tcpkill(một phần của dsniffgói) để hủy kết nối trên cổng bạn cần:

sudo tcpkill -9 port PORT_NUMBER

11
cái này chỉ bị treo$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
Anentropic

16

Trong loại thiết bị đầu cuối:

netstat -anp|grep "port_number"

Nó sẽ hiển thị các chi tiết cổng. Tới cột cuối cùng. Nó sẽ ở định dạng này. Ví dụ: - PID / java

sau đó thực hiện:

kill -9 PID. Worked on Centos5

Đối với MAC:

lsof -n -i :'port-number' | grep LISTEN

Trả lời mẫu:

java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)

và sau đó thực thi:

kill -9 PID 

Làm việc trên Macbook


rõ ràng điều này không hoạt động nếu cột PID trống cho cổng đó
Anentropic

1
... và điều đó xảy ra nếu bạn không có quyền xem quy trình ... hãy thử sudo netstatthực sự xem các bộ vi xử lý :)
Anentropic

Tôi đã cố gắng để giết một cổng trên một ví dụ amazon ec2 thông qua putty cli. Mãi mãi nói rằng nó không có quá trình nào chạy nhưng cổng (4200 cho một ứng dụng góc cạnh) vẫn mở. Đây là lệnh duy nhất hoạt động với tôi.
vtechmonkey

9

Các "netstat --programs"lệnh sẽ cung cấp cho bạn những thông tin quá trình, giả sử bạn đang root. Sau đó, bạn sẽ phải giết quá trình "vi phạm" có thể bắt đầu lại chỉ để làm phiền bạn :-).

Bạn thực sự đang cố gắng đạt được điều gì ở đây? Các giải pháp sẽ thay đổi dựa trên các quy trình giữ các cổng đó.


8

Để kiểm tra tất cả các cổng:

netstat -lnp

Để đóng một cổng mở:

fuser -k port_no/tcp

Thí dụ:

fuser -k 8080/tcp

Trong cả hai trường hợp, bạn có thể sử dụng sudolệnh nếu cần.


7

Giết quá trình đang lắng nghe cổng trong câu hỏi. Tôi tin rằng netstat cho bạn thấy quá trình id.


3
netstat -anp | grep <port> cột cuối cùng có quá trình
dùng1747935

2

Nếu bạn thực sự muốn giết một tiến trình ngay lập tức, bạn gửi tín hiệu KILL thay vì tín hiệu HẠN (yêu cầu dừng lại, yêu cầu đầu tiên sẽ có hiệu lực ngay lập tức mà không cần dọn dẹp). Nó rất dễ làm:

kill -KILL <pid>

Tuy nhiên, hãy lưu ý rằng tùy thuộc vào chương trình bạn đang dừng, trạng thái của chương trình có thể bị hỏng nghiêm trọng khi thực hiện. Bạn thường chỉ muốn gửi tín hiệu KILL khi kết thúc bình thường không hoạt động. Tôi đang tự hỏi vấn đề tiềm ẩn là bạn cố gắng giải quyết vấn đề gì và liệu giết chóc có phải là giải pháp đúng đắn hay không.




-14

Tắt máy tính luôn giết chết quá trình cho tôi.


Tắt máy chủ là rất hiếm.
waqas

23
bạn đã có được huy hiệu "hài hước nhất" chưa?
jplandrain

Không cần phải tắt máy tính của bạn.
Anil Chahal

Ý tưởng hay nhất từ ​​trước đến nay 10/10
Valentin Roudge 27/1/2016

10
Không giống như một số câu trả lời khác, điều này chắc chắn sẽ hoạt động
Anentropic
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.