Chắc hẳn anh em Dev hay Sysadmin hay DevOps dùng Linux hay Windows hay cả Mac đều đã gặp qua dòng lỗiError: listen EADDRINUSE: address already in use :::3000. Lỗi này đến từ việc anh em đang chạy server, bấm Ctrl + C để tắt, sau đó chạy lại lệnh start. Lý do là cái process cũ nó chưa chịu tắt hẳn, nó vẫn đang chiếm cái port 3000.
Lúc này, bạn sẽ phải đi tìm ID của tiến trình PID đó rồi gõ lệnh kill (Mac/Linux) hoặc taskkill (Windows) rất mất thời gian.
Hôm nay tôi giới thiệu với anh em về Port-kill, một công cụ nhỏ gọn sinh ra chỉ để làm đúng một việc: Giải phóng cái port đang bị kẹt đó ngay lập tức.

Tại sao là Port-kill?
Có rất nhiều cách để kill một port, vậy tại sao lại cần cài thêm tool này? Đơn giản vì nó giải quyết vấn đề trải nghiệm người dùng:
- Không cần nhớ PID: Anh em không cần quan tâm cái process đang chạy ngầm kia có ID là bao nhiêu. Anh em chỉ cần nhớ cái Port mình muốn kill.
- Cú pháp siêu ngắn: Thay vì gõ một chuỗi lệnh dài ngoằng, anh em chỉ cần gõ đúng tên tool + số port.
- Cross-platform: Đây là điểm ăn tiền nhất. Dù anh em dùng Windows, macOS hay Linux, cú pháp lệnh vẫn y hệt nhau. Bạn không cần nhớ lệnh
lsofhaynetstatnữa.
Setup nhanh
Tool này cài đặt bằng script tự động, nó sẽ tự tải file binary về và cấu hình đường dẫn path cho bạn.
Với macOS hoặc Linux
Rất đơn giản, Bạn mở terminal lên và chạy đúng một dòng lệnh
curl -fsSL https://raw.githubusercontent.com/treadiehq/port-kill/main/install-release.sh | bash
Chạy xong là dùng được luôn.
Với Windows
Bạn mở powershell hoặc cmd lên và chạy lần lượt 2 lệnh sau:
curl.exe -L "https://raw.githubusercontent.com/treadiehq/port-kill/main/install-release.bat" -o install-release.bat
.\install-release.bat
Lưu ý cho anh em dùng Windows: Sau khi cài xong, anh em buộc phải tắt hoàn toàn terminal đi và mở lại. Lý do là Windows cần khởi động lại phiên làm việc thì mới nhận diện được đường dẫn mới của port-kill. Nếu không tắt đi bật lại, gõ lệnh nó sẽ báo lỗi command not found.
Trải nghiệm sử dụng Port-kill
Cài đặt xong xuôi rồi, giờ đến phần quan trọng nhất: Dùng thế nào cho "sướng"?
Nếu chỉ dùng để kill cái port linh tinh thì phí quá, vì tôi phát hiện ra con tool này còn làm được nhiều trò hay ho hơn thế nhiều. Dưới đây là tôi test vọc vạch từng tính năng của nó.
Đầu tiên, hãy nói về cái cơ bản nhất: Quản lý Port. Đây là những tình huống bạn gặp hàng ngày như cơm bữa.
Giả sử: Sáng thứ 2 đầu tuần, mắt nhắm mắt mở, chạy npm start thì lỗi tùm lum do port 3000 và 5000 đang bị chiếm dụng bởi mấy cái process từ tuần trước.
Thay vì đi mò tìm PID rồi kill từng cái, thì với port-kill, bạn chỉ cần gõ đúng một dòng để dọn sạch cả cụm:
port-kill 3000 5000
Nhưng cái tôi thích nhất là lệnh safe kill. Có lần tôi lỡ tay kill nhầm một process hệ thống quan trọng khi gõ lệnh vội. Với port-kill, bạn thêm cờ --safe vào, nó sẽ hiện ra thông tin chi tiết: “Ê, cái process này tên là system_critical.exe, ông có chắc muốn kill nó không?”.
port-kill 3000 --safe
Tính năng này phù hợp cho các bạn newbie hoặc những ai hay… hậu đậu :))
Smart Restart & Guard
Đây là tính năng tôi đánh giá là ăn tiền nhất, thứ mà các tool kill port khác không có.
Ví dụ: Bạn đang debug một con server Node.js hay crash. Cứ mỗi lần sửa code -> lỗi -> crash -> lại phải vào terminal gõ Up Arrow + Enter để chạy lại. Rất mất thời gian.
Với port-kill: Tôi bật chế độ Guard Mode lên:
# Cú pháp: Giám sát port 3000 và tự động restart nếu nó crash
port-kill --guard 3000 --guard-auto-restart
Lúc này, port-kill hoạt động như một “người bảo vệ”.
- Nó nhớ luôn câu lệnh khởi động server của bạn.
- Nếu process ở port 3000 bị crash, nó tự động restart ngay lập tức.
- Bạn chỉ việc tập trung code, không cần quan tâm đến cái terminal nữa.
Nếu bạn muốn restart thủ công mà không cần nhớ lệnh start ban đầu là gì? Chỉ cần:
port-kill --restart 3000
Quá tiện luôn :))
Orchestrate Services
Nếu bạn đang build hệ thống theo kiến trúc Microservices, chắc hẳn đã quá quen với cảnh này. Để chạy được trọn vẹn luồng nghiệp vụ dưới local, bạn phải mở hàng loạt tab: API Gateway (8080), Auth Service (5000), Payment Service (5001)…
port-kill cung cấp một giải pháp thay thế nhẹ tựa lông hồng: Chạy trực tiếp process nhưng quản lý tập trung.
Đầu tiên, bạn tạo file config tại gốc dự án:
port-kill --init-config
Sau đó, bạn định nghĩa dự án microservices vào file .port-kill.yaml. Cái hay là nó hỗ trợ đa ngôn ngữ, đa thư mục cực mượt:
services:
# Cổng chính vào hệ thống
api-gateway:
command: npm run start:gateway
port: 8080
dir: ./services/gateway
# Service xác thực (Node.js)
auth-service:
command: npm run dev
port: 5000
dir: ./services/auth
# Service thanh toán (Go - Chạy binary trực tiếp cho nhanh)
payment-service:
command: go run main.go
port: 5001
dir: ./services/payment
# Service notify (Python)
notification-service:
command: python3 app.py
port: 5002
dir: ./services/notification
Giờ đây, mỗi sáng đến công ty, bạn chỉ cần đúng một động tác:
port-kill --up
-> Toàn bộ hệ sinh thái Microservices sẽ đồng loạt khởi động.
Tips nhỏ cho người lười: Nếu bạn lười đến mức không muốn ngồi viết file config .yaml? Không sao cả. port-kill có khả năng tự nhận biết xem dự án này chạy bằng gì.
bạn chỉ cần đứng ở thư mục gốc và gõ:
port-kill --detect
Nó sẽ quét package.json, go.mod… và tự động đề xuất lệnh chạy. Ví dụ nó phát hiện ra lệnh dev, bạn chạy luôn:
port-kill --start npm:dev
Quản lý Cache Dev (Cache Management)
Đây là tính năng khiến tôi bất ngờ nhất. Thường thì anh em dev hay bị ám ảnh bởi chuyện đầy ổ cứng. Thủ phạm không ai khác chính là:
target,~/.cargo(của Rust Dev, nặng vài chục GB là thường)- (
node_modules,.next,.vite) (của JavaScript/TypeScript) __pycache__,.venv,.pytest_cache(của Python).gradle, build cache (của Java)
Bình thường bạn hay dùng lệnh rm -rf node_modules (rất nguy hiểm nếu gõ nhầm đường dẫn) hoặc phải cài thêm tool dọn dẹp riêng. Nhưng port-kill tích hợp sẵn luôn trình quản lý Cache thông minh.
Bước 1: Liệt kê
Tôi muốn xem dự án này đang ngốn bao nhiêu dung lượng rác:
port-kill cache --list
Nó sẽ liệt kê chi tiết cụ thể xem đang có bao nhiêu GB node_modules, bao nhiêu MB cache build của Next.js…
Bước 2: Safe Clean
Tôi muốn xóa cache để cài lại dependencies cho sạch, nhưng sợ xóa xong lỗi dự án không chạy được nữa. port-kill có cơ chế safe delete (xóa có backup).
port-kill cache --clean --safe-delete
Lệnh này không xóa bay vĩnh viễn ngay. Nó nén lại và cất vào một chỗ. Nếu lỡ xóa xong mà dự án toang, bạn có restore lại ngay:
port-kill cache --restore-last
-> Tính năng Undo này thực sự là cứu cánh cho những pha tay nhanh hơn não.
Tips cho người kỹ tính: Nếu sợ bấm nút xóa là “bay màu” nhầm file quan trọng, hãy dùng chế độ
--dry-run
port-kill cache --clean --dry-run
Nó sẽ không xóa gì cả, chỉ in ra báo cáo xem trước. Thấy ổn thì mới chốt đơn xóa thật.
Automation & Scripting
Nếu bạn muốn tích hợp port-kill vào các tool tự động hóa hoặc viết script bash để quản lý server, tool này hỗ trợ xuất dữ liệu cực chuẩn.
Xuất dữ liệu JSON Thay vì in ra bảng đẹp mắt cho người đọc, bạn có thể yêu cầu nó in ra JSON để máy đọc:
port-kill --list --output json
Kết quả trả về dạng JSON chứa PID, Port, Memory usage… Bạn có thể dùng dữ liệu này để bắn thông báo lên Slack nếu server ngốn quá nhiều RAM.
Kiểm tra healcheck hệ thống: Khi chạy nhiều services, làm sao biết thằng nào đang sống, thằng nào đang ngắc ngoải?
port-kill --status
Dashboard xịn xò

Bạn truy cập vào thư mục dashboard trong source code (hoặc làm theo hướng dẫn trong repo để lôi nó về), sau đó khởi động lên như một dự án React bình thường:
cd dashboard
npm install
npm run dev
Mở trình duyệt tại http://localhost:3002, bạn sẽ thấy một Command center:
- Real-time Charts: Biểu đồ CPU và RAM thời gian thực của từng process đang chạy. bạn sẽ biết ngay thằng service nào đang ngốn RAM.
- Restart History: Lịch sử thằng nào hay bị crash, crash lúc mấy giờ. Rất tiện để debug các lỗi chập chờn.
- Security Audit: Nó quét các port đang mở và cảnh báo nếu có port nào trông đáng ngờ (ví dụ mở port lạ ra internet).
-> Biến máy local của bạn trông chuyên nghiệp như một server production.
Lời kết
Port-kill không còn là một công cụ hỗ trợ đơn thuần, nó là bản nâng cấp đáng giá cho terminal của anh em.
Nó thay thế sự rời rạc của kill, lsof, nodemon hay các script dọn dẹp bằng một quy trình thống nhất, mượt mà và an toàn hơn. Nếu bạn đang tìm kiếm sự gọn gàng và tốc độ trong công việc.




