Câu hỏi Tìm (và giết) xử lý khóa cổng 3000 trên máy Mac


Làm cách nào để tìm các quy trình nghe / sử dụng các cổng tcp của tôi? Tôi đang trên mac os x.

Đôi khi, sau khi một vụ tai nạn hoặc một số lỗi, ứng dụng đường ray của tôi là khóa cổng 3000. Tôi không thể tìm thấy nó bằng cách sử dụng ps -ef ... Làm thế nào để tôi tìm thấy những điều ngu ngốc và giết nó, tàn bạo ...?

Khi làm

rails server

tôi có

Địa chỉ đã được sử dụng - liên kết (2) (Errno :: EADDRINUSE)

Cập nhật năm 2014:

Để hoàn thành một số câu trả lời dưới đây: Sau khi thực thi lệnh giết, việc xóa tệp pid có thể cần thiết rm ~/mypath/myrailsapp/tmp/pids/server.pid


1061
2017-10-04 12:19


gốc


Port 3000 là phát triển đặc biệt của Rails, bạn có đồng ý không? Có khả năng là ít người hơn sẽ tìm thấy câu trả lời cho vấn đề phát triển Rails phổ biến này và nó sẽ được hỏi lại nếu được di chuyển. Tôi phản đối. 2 xu của tôi. - oma
eh, những người quan tâm nếu 3000 là đường ray cụ thể .... một +1 kể từ khi tôi đang cố gắng để mở khóa cổng 8000 .... (Tôi không thấy lý do tại sao họ đóng các câu hỏi hữu ích như vậy). - Dean Hiller
Một giải pháp rất gọn gàng để giết một tiến trình trên bất kỳ cổng nào do người dùng chỉ định có thể được tìm thấy trong câu trả lời của @Kevin Suttle bên dưới. Đã sao chép ở đây cho hậu thế: function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 } - user456584
Đặt một phiếu bầu mở lại về điều này. Các nhà phát triển thường cần phải quản lý tài nguyên trên máy tính của riêng họ. Lỗi máy chủ dành cho quản trị viên máy chủ chuyên nghiệp, không dành cho máy phát triển người dùng cuối. - jmort253
Tôi đã bỏ phiếu để mở lại. Bash scripting có thể được coi là lập trình. - trusktr


Các câu trả lời:


  1. Bạn co thể thử netstat

    netstat -vanp tcp | grep 3000
    
  2. Dành cho macOS El Capitan và mới hơn (hoặc nếu netstat của bạn không hỗ trợ -p), sử dụng lsof

    sudo lsof -i tcp:3000 
    
  3. Dành cho Centos 7 sử dụng

    netstat -vanp --tcp | grep 3000
    

1763
2017-10-04 12:48



netstat -anp không thành công. netstat: option requires an argument -- p - oma
netstat -anp tcp | grep 3000 trình diễn tcp4 1062 0 127.0.0.1.3000 127.0.0.1.51255 ESTABLISHED tiếp theo là gì? 1062 không phải là một pid ... - oma
ồ vâng! bạn đang cập nhật là chính xác. lsof -i tcp:3000 tốt đẹp :) - oma
Cảm ơn bạn! Câu trả lời của bạn đã sinh ra tập lệnh "death_to 'port'" của tôi. (#! / usr / bin / ruby lsof -t -i tcp:#{ARGV.first} | xargs kill) - Sv1
Cờ "terse" để lsof tạo ra đầu ra phù hợp cho đường ống tới một lần giết tiếp theo: lsof -t -i tcp:1234 | xargs kill - Manav


Tìm thấy:

[sudo] lsof -i :3000

Giết chết:

kill -9 <PID>

1173
2017-09-09 20:58



Tìm thấy điều này hữu ích nhất. Tôi thích cách lsof -i có tiêu đề bảng nên tôi biết tất cả những điều vô nghĩa - netpoetica
Upvote cho sự đơn giản và đầy đủ - BradGreens
Đôi khi lsof -i: port sẽ không hiển thị gì cả. thử sudo lsof -i: cổng. - kilik52
Đề xuất thử kill -15 <PID> trước khi dùng đến -9 vì sự an toàn. - Jamon Holmgren
@ Jamon Holmgren tại sao? cả hai làm gì? và tại sao là kill <PID> không đủ / nguy hiểm / không đầy đủ? - Michael Trouw


Không có gì ở trên làm việc cho tôi. Bất cứ ai khác với kinh nghiệm của tôi có thể thử những điều sau (làm việc cho tôi):

Chạy:

lsof -i :3000 (where 3000 is your current port in use)

sau đó kiểm tra trạng thái của PID được báo cáo:

ps ax | grep <PID>

cuối cùng, "cầu xin với nó":

kill -QUIT <PID>

94
2018-03-07 20:24



Điều này thực sự có vẻ là một câu trả lời tốt hơn so với một trong những cung cấp cho nhiều sau đó bởi Filip Spiridonov, trong đó có 277 upvotes chống lại 9. Yours của bạn là 6 tháng trước đó, và có cùng một thông tin với một chút giải thích thêm. Không có công lý ... - Floris


Bạn có thể dùng lsof -i:3000.

Đó là "Liệt kê các tập tin mở". Điều này cung cấp cho bạn một danh sách các quy trình và các tệp và cổng mà chúng sử dụng.


83
2017-10-04 12:36



Tôi đang trên 10.5 lepard (cập nhật Q). Tôi không biết nếu vấn đề ở đây, nhưng lsof không hiển thị cổng. lsof -h (lsof 4.78) cũng quá khó hiểu ... - oma
Hmm. Không biết chắc chắn về Leopard, nhưng hãy thử (gốc - đó là quan trọng, tôi nghĩ) lsof -i:3000. - Matt Gibson
gốc là không cần thiết. lsof -i: 3000 công trình quá ... chỉnh sửa câu trả lời của bạn và đặt nó vào đó. Nhiều thứ nhìn thấy được. Tôi đã cho bạn một upvote, nhưng câu trả lời cho người dùng #. Cảm ơn bạn đã trợ giúp! - oma


Một lớp lót để trích xuất PID của quá trình sử dụng cổng 3000 và tiêu diệt nó.

lsof -ti:3000 | xargs kill

Cờ -t loại bỏ tất cả mọi thứ trừ PID từ đầu ra lsof, làm cho nó dễ dàng bị giết.


76
2017-08-05 21:03



Cũng sẽ giết trình duyệt bằng localhost: 3000 mở - rlovtang
Bạn có thể lọc ra các cổng "nghe" với: lsof -ti:3000 -sTCP:LISTEN - Zlemini


Trong của bạn .bash_profile, tạo lối tắt cho terminate quy trình 3000:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

Sau đó gọi $terminate nếu nó bị chặn.


49
2018-05-16 09:17



Bạn có thể thực hiện điều này đủ linh hoạt cho bất kỳ cổng nào: github.com/kevinSuttle/dotfiles/commit/… - Kevin Suttle
Và một tên mô tả = p - Michael Peterson
Tôi có một cái gì đó tương tự như thế này nhưng tôi vượt qua trong cảng. Tôi đã đặt tên hàm KP của mình để giết cổng. - Joseph Chambers


Để ép buộc một quá trình như thế, hãy sử dụng lệnh sau

lsof -n -i4TCP:3000 

Trong đó 3000 là số cổng mà quy trình đang chạy tại

điều này trả về id tiến trình (PID) và chạy

kill -9 "PID"

Thay thế PID bằng số bạn nhận được sau khi chạy lệnh đầu tiên

For Instance, if I want kill the process running on port 8080


41
2017-12-28 04:21





lsof -P | grep ':3000' | awk '{print $2}'

Điều này sẽ cung cấp cho bạn chỉ là pid, được thử nghiệm trên MacOS.


35
2017-08-03 21:14



trên MAC giết tất cả các pids trên cổng 3000: lsof-P | grep ': 3000' | awk '{print $ 2}' | xargs kill -9 - mike clagg
có thể có nhiều quá trình lắng nghe cùng một cổng? - Kris
Ứng dụng đường ray của chúng tôi sinh ra công nhân là quá trình con, và tôi phải sử dụng nó để giết người lao động mồ côi - mike clagg
điều này cũng giết chết các trình duyệt web kết nối với cổng - fjsj
Đây là một trong những hoạt động: lsof -n -iTCP:3407 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9 - bob


Một trong những cách để giết một tiến trình trên một cổng là sử dụng thư viện python: freeport (https://pypi.python.org/pypi/freeport/0.1.9). Sau khi cài đặt, chỉ cần:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully

26
2018-02-12 22:14



Đó là, cho đến nay, KHÔNG phải là cách đơn giản nhất. Các câu trả lời upvoted không yêu cầu bạn tải về và cài đặt bất cứ điều gì. - Greg Pasquariello
Khi các điều kiện tiên quyết được đáp ứng, điều này rất đơn giản và dễ nhớ. Chúng tôi có một định nghĩa khác về "đơn giản nhất" và câu trả lời này là hoàn toàn hợp lệ và phù hợp. Có lẽ nó chỉ thiếu các hướng dẫn để cài đặt freeport với pip. - Cyril Duchon-Doris


Thực hiện trong dòng lệnh trên OS-X El Captain:

kill -kill `lsof -t -i tcp:3000`

Tùy chọn Terse của lsof chỉ trả về PID.


24
2018-06-23 18:15