Kill process đang chạy trên cổng 80


14

Đây là quá trình tôi muốn giết:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd

Câu trả lời:


31

Có một số cách để tìm quá trình chạy nào đang sử dụng một cổng.

Sử dụng bộ nhiệt áp, nó sẽ cung cấp cho (các) bộ lọc của nhiều trường hợp liên quan đến cổng nghe.

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

Sau khi tìm hiểu, bạn có thể dừng hoặc hủy quá trình.

Bạn cũng có thể tìm thấy các PID và biết thêm chi tiết bằng lsof

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

Để giới hạn các ổ cắm nghe trên cổng 80 (trái ngược với các máy khách kết nối với cổng 80):

sudo lsof -i tcp:80 -s tcp:listen

Để tự động tiêu diệt chúng:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

1
Tôi muốn chỉ ra rằng bộ nhiệt áp cũng có công -ktắc để giết tất cả các quy trình khớp và -iđể giết tương tác (nhắc nhở bạn cho từng quy trình).
A. Wilcox

7

Đây là một oneliner hiển thị lệnh để chạy:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

Thay thế echobằng sudocho quá trình này để thực sự bị giết.


Thay thế echochosudo
EliuX

Đây là câu trả lời hoàn hảo mà chúng ta chỉ cần thay thế số cổng của mình bằng 80.
Youssof H.

4

Ba tùy chọn để liệt kê các cổng mở được cung cấp trong jsh 's whatisonport:

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

Tôi thích netstatvì nó nhanh, súc tích và có thể liệt kê các cổng được mở bởi người dùng khác. (Mặc dù nó vẫn sẽ cần siêu người dùng / đặc quyền người dùng để liệt kê tên và PID của các quy trình đó.)

Đầu ra

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

Việc sử dụng greptrong hai trường hợp là chỉ khớp với cổng ở phía cục bộ và bỏ qua các kết nối mở với cổng từ xa 80. (Một cách khác là sử dụng -lvới netstathoặc lsofsử dụng -sTCP:LISTEN, nhưng tôi thích các greps ở trên vì chúng sẽ cũng bắt các kết nối đi từ cổng đã cho, đôi khi có thể được quan tâm.)

Với lsofchúng tôi sử dụng -Pđể hiển thị :80thay vì :httpđể làm cho grep có thể. Các -S 2lực lượng tùy chọn lsofđể hoàn thành một cách kịp thời.

Giết chết quá trình

Giả sử chúng ta muốn sử dụng netstat, chúng ta có thể lấy các PID như thế này:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

Và chúng tôi thậm chí có thể chuyển các PID đó sang kill:

... | xargs -d '\n' kill -KILL

Tuy nhiên, thường có khả năng dương tính giả khi sử dụng regexps, vì vậy tôi khuyên bạn chỉ nên nhìn vào đầu ra ban đầu netstatvà sau đó quyết định bằng tay có nên chạy hay không:

$ kill -KILL 1914

Xem thêm

Tôi có một kịch bản khác được gọi là listopenportscó thể được quan tâm.


3

Bạn đã tìm ra quy trình cần giết: đó là số tiến trình 20570và số nhị phân của nó có tên httpdnhư được viết ở cuối dòng đầu ra netstat. Bạn có thể giết nó bằng số kill 20570hoặc theo tên killall httpdnhưng tôi không khuyên bạn nên làm theo cách đó.

Các cổng thấp hơn 1024 có cách sử dụng được tiêu chuẩn hóa (thông thường), bạn có thể tra cứu các cổng đó và nhiều cổng khác less /etc/services. Mục nhập cho cổng 80 thậm chí còn được nhận xét:

http            80/tcp          www             # WorldWideWeb HTTP

Vì vậy, nó rất có thể là một máy chủ web. Tên bạn có httpdman httpdsẽ cung cấp cho bạn một gợi ý lớn rằng đó là nhị phân Apache phù hợp. Apache là một trong những người chơi lớn, nó có sẵn một số chương trình quản lý thoải mái nhưng bạn không cần chúng cho một hành động bắt đầu / dừng đơn thuần.

Bạn có bạc hà? Với một máy tính để bàn bình thường? Sau đó nhìn vào bên Control Centerdưới Systemvà nhấp vào Services. Bạn cần phải là quản trị viên để làm bất cứ điều gì ở đó. Cuộn xuống cho đến khi bạn tìm thấy một cái gì đó có nhãn "máy chủ web" (Tôi có lighttpd thay vì Apache và không biết chính xác mục nhập của Apache sẽ như thế nào) và bỏ chọn nó.

Nếu bạn chỉ muốn dừng nó tạm thời thử, trong bảng điều khiển

sudo service stop httpd

và bắt đầu với sudo service start httpd. service --status-alltrả về một danh sách tất cả các dịch vụ servicebiết và có thể xử lý. Một phím tắt cho một khởi động lại một dịch vụ (có nghĩa là: dừng lại và bắt đầu nó theo thứ tự đó) là service --full-restart SERVICESERVICElà tên của dịch vụ, Eg .: httpdtrong trường hợp của Apache.

Hầu hết các chương trình bạn tìm thấy có netstatthể được xử lý theo cách đó. Một số không thể và một số thậm chí không có trang nam nhưng những trang này rất hiếm.


0

Có một cách đơn giản để làm điều này. Trước tiên hãy kiểm tra quá trình nào đang sử dụng cổng 80 bằng netstat :

netstat -ntl | grep 80

Bây giờ bạn đã có tên quy trình và giết tiến trình bằng lệnh killall :

killall -9 process name

Những nguy hiểm của việc sử dụng lệnh 'killall' là gì?
Peter Mortensen

2
-1 cho killallmà không cần giải thích hoặc cảnh báo.
guntbert

1
Có một số vấn đề với killall. Bên cạnh việc có thể mang đến cho nó các đầu gối một hệ thống trong trường hợp có vấn đề, nó cũng có thể giết chết nhiều trường hợp của một quá trình không liên quan đến cổng. Trên hết, vấn đề lớn nhất của killall là nếu ai đó trong hộp Solaris cố gắng sử dụng nó, nó sẽ giết chết tất cả các quy trình đang chạy.
Rui F Ribeiro
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.