07/09/2018, 11:09

Kiểm tra process nào đang chiếm port cho trước trên Mac OS (cập nhật 2017)

Mặc dù được phát triển dựa trên Linux Kernel tuy nhiên hệ điều hành Mac OS có không ít những tính năng rất khác biệt so với thế giới của chim cánh cụt. Một trong số này là cách kiểm tra xem process nào đang chiếm dụng một cổng cho trước. Trong bài viết này chúng ta sẽ tìm hiểu hai cách phổ biến đó ...

Mặc dù được phát triển dựa trên Linux Kernel tuy nhiên hệ điều hành Mac OS có không ít những tính năng rất khác biệt so với thế giới của chim cánh cụt. Một trong số này là cách kiểm tra xem process nào đang chiếm dụng một cổng cho trước. Trong bài viết này chúng ta sẽ tìm hiểu hai cách phổ biến đó là sử dụng lsof và netstat để thực hiện thao tác này trên Mac OSX.

Sử Dụng lsof

lsof là viết tắt của list open file và dùng để hiển thị thông tin của các file hệ thống đang được mở bởi tất cả các process hiện có. Bạn nhớ lại rằng với Linux thì tất cả đều được xem như một file và điều này bao gồm cả các chương trình quản lý network của hệ thống.

Cú pháp sử dụng câu lệnh lsof để tìm ra process nào đang chạy trên cổng cho trước như sau như sau:

lsof -i :PORT_NUMBER

Thay PORT_NUMBER bằng cổng bạn muốn kiểm tra.

Lấy một ví dụ điển hình như khi chúng ta cần khỏi động web server trên port 80 nhưng gặp lỗi báo cổng này đang được sử dụng bởi process khác. Khi đó muốn kiểm tra xem process nào đang chiếm port 80 bạn chạy câu lệnh sau:

lsof -i :80

Kết quả:

Kiểm tra process chạy port 80 sử dụng lsof

Và cũng lưu ý rằng trong một trường hợp chúng ta sẽ cần chạy dưới quyền root để nhìn thấy được proceess:

sudo lsof -i :80

Bạn có thể xem trong manpage để biết thêm chi tiết về câu lệnh này:

man lsof

Mặc dù đang được sử dụng phổ biến ngày nay tuy nhiên tôi nhận thấy rằng đối với các Sysadmin thế hệ 8x trở về trước thì câu lệnh này có vẻ hơi xa lạ với họ bởi vì họ thường sử dụng một câu lệnh khác có tên là netstat.

Sử Dụng netstat

Mặc dù tiện dụng và dễ nhớ tuy nhiên lsof không được cài đặt trên các phiên bản cũ hơn của Mac OSX. Trường hợp này lập trình viên thường sử dụng netstat để thay thế.

Cú pháp câu lệnh này như sau:

netstat -a -p tcp | grep -i "PORT_NUMBER" 

Ví dụ để kiểm tra process nào đang chạy trên cổng 80:

netstat -a -p tcp | grep -i "80" 

Kết quả:

Kiểm tra process chạy port 80 sử dụng netstat

Để hiển thị cổng dưới dạng số:

netstat -a -p tcp | grep -i "80" 

Và khi chạy câu lệnh netstet thì bạn cũng sẽ thường thấy câu các option -a và -p... được gom lại như sau:

netstat -vanp tcp | grep 80

Tương tự mạn cũng có thể xem bản manual hướng dẫn dành cho câu lệnh netstat:

man lsof

Cũng lưu ý rằng netstat từ các phiên bản gần đây của Mac OS (từ OSX El Capitan về sau) không hỗ trợ chạy tuỳ chọn -p do đó bạn cần dùng lsof.

0