lsof commands

Address already in use và cách giải quyết

Chắc chắn không ít lần các bạn đã gặp thông báo lỗi Address already in use.

Lỗi trên có thể xảy ra khi bạn cài đặt một ứng dụng đòi hỏi mở port, start một server, run các web application với nodejs v.v… Nói chung là để chạy các tiến trình.

Về ý nghĩa thì thông báo lỗi trên đã nói khá rõ vấn đề chúng ta gặp là gì. Port mà các bạn/ứng dụng cần chạy đã được sử dụng bởi một tiến trình khác. Do đó, cách giải quyết đơn giản là các bạn thay đổi port cho tiến trình các bạn đang muốn chạy thôi.

Tuy nhiên, nếu các bạn muốn tắt một tiến trình để dùng port của nó cho tiến trình khác thì sao?

Các bạn sẽ phải list các tiến trình đang chạy trong hệ thống và lọc kết quả theo port.

Các bạn có thể làm điều đó với 3 lệnh sau: (Bài viết này mình viết cho các hệ thống chạy trên nền linux).

  1. lsof
  2. grep
  3. kill

Tìm kiếm tiến trình đang sử dụng một port (address already in use)

Để làm được điều này, các bạn sẽ kết hợp 2 lệnh lsofgrep với nhau.

Các bạn gõ lệnh sau vào terminal:

lsof  -i -P  -n | grep <port_can_tim>

Ví dụ, các bạn đang cần tìm xem port 3000 đang được sử dụng bởi tiến trình nào, khi ấy lệnh các bạn cần gõ sẽ như sau:

lsof  -i -P  -n | grep 3000

Terminal sẽ hiển thị tiến trình đang sử dụng port các bạn đang tìm. Output sẽ có dạng như sau:

Các bạn có thể google để hiểu thêm về lệnh lsof.

Ở đây, các bạn chỉ cần quan tâm dãy số ở cột thứ 2. Đó chính là ID của tiến trình bạn đang tìm.

Kill Process

Sau khi đã có Process ID rồi, các bạn sẽ tiếp tục dùng lệnh kill để tắt tiến trình đó.

Cú pháp của lệnh kill các bạn cần là:

kill <process_id>

Trong hình minh họa bên trên, tiến trình mình muốn tắt có ID62814. Vậy mình sẽ dùng lệnh kill như sau:

kill 62814

Trả lời