Một trong những nhiệm vụ quan trọng nhất trong quản trị hệ thống Linux là quản lý tiến trình. Nó bao gồm một số hoạt động trong giám sát, gửi tín hiệu cho tiến trình cũng như thiết lập độ ưu tiên tiến trình trong hệ thống.
Có nhiều công cụ/tiện ích Linux được thiết kế để giám sát/xử lý tiến trình như top, ps, pgrep, kill, killall, nice kết hợp với nhiều công cụ khác.
Trong bài viết này, chúng ta sẽ khám phá cách tìm tiến trình bằng một tiện ích Linux mạnh mẽ có tên là fuser.
fuser là một tiện ích dòng lệnh đơn giản nhưng mạnh mẽ, được thiết kế để xác định tiến trình dựa trên các tệp, thư mục hoặc socket mà một tiến trình cụ thể đang truy cập. Nó giúp người dùng hệ thống xác định tiến trình sử dụng tệp hoặc socket.
Cách sử dụng fuser trong hệ thống Linux
Cú pháp thông thường khi sử dụng fuser là:
# fuser [options] [file|socket]
# fuser [options] -SIGNAL [file|socket]
# fuser -l
Dưới đây là một số ví dụ về việc sử dụng fuser để tìm tiến trình trên hệ thống của bạn.
Tìm Tiến Trình Truy Cập Thư Mục
Chạy lệnh fuser mà không có bất kỳ tùy chọn nào sẽ hiển thị các PID của các tiến trình đang truy cập thư mục làm việc hiện tại của bạn.
$ fuser .
OR
$ fuser /home/tecmint
Để có đầu ra chi tiết và rõ ràng hơn, hãy bật tùy chọn -v hoặc --verbose như sau. Trong đầu ra, fuser in ra tên thư mục hiện tại, sau đó là các cột của chủ sở hữu tiến trình (USER), ID tiến trình (PID), kiểu truy cập (ACCESS) và lệnh (COMMAND) như trong hình ảnh dưới đây.
$ fuser -v
Dưới cột ACCESS, bạn sẽ thấy các loại truy cập được biểu thị bằng các chữ cái sau:
- c – thư mục hiện tại
- e – một tệp thực thi đang chạy
- f – tệp được mở, tuy nhiên 'f' bị bỏ qua trong đầu ra
- F – mở tệp để ghi, 'F' cũng bị loại ra khỏi đầu ra
- r – thư mục gốc
- m – tệp mmap hoặc thư viện chia sẻ
Tìm Tiến Trình Truy Cập Hệ Thống Tệp Tin
Tiếp theo, bạn có thể xác định tiến trình nào đang truy cập vào tệp tin ~.bashrc của bạn như sau:
$ fuser -v -m .bashrc
Tùy chọn -m NAME hoặc --mount NAME có nghĩa là đặt tên cho tất cả các tiến trình truy cập vào tệp tin NAME. Trong trường hợp bạn đặt tên thư mục là NAME, nó sẽ tự động thay thế thành NAME/ để sử dụng bất kỳ hệ thống tệp tin nào có thể được gắn kết trên thư mục đó.
Cách Kết Thúc và Gửi Tín Hiệu cho Tiến Trình Sử Dụng fuser
Trong phần này, chúng ta sẽ làm việc thông qua việc sử dụng fuser để kết thúc và gửi tín hiệu cho tiến trình.
Để kết thúc một tiến trình đang truy cập vào một tệp tin hoặc socket, sử dụng tùy chọn -k hoặc --kill như sau:
$ sudo fuser -k .
Để kết thúc tương tác một tiến trình, trong đó bạn được yêu cầu xác nhận ý định của mình để kết thúc các tiến trình đang truy cập vào một tệp hoặc socket, sử dụng tùy chọn -i hoặc --interactive:
$ sudo fuser -ki .
Hai lệnh trước đó sẽ kết thúc tất cả các tiến trình đang truy cập vào thư mục hiện tại, tín hiệu mặc định được gửi đến các tiến trình là SIGKILL, trừ khi sử dụng -SIGNAL.
Bạn có thể liệt kê tất cả các tín hiệu sử dụng tùy chọn -l hoặc --list-signals như sau:
$ sudo fuser --list-signals
Do đó, bạn có thể gửi tín hiệu cho tiến trình như trong lệnh tiếp theo, trong đó SIGNAL là bất kỳ tín hiệu nào được liệt kê trong đầu ra ở trên.
$ sudo fuser -k -SIGNAL
Ví dụ, lệnh dưới đây gửi tín hiệu HUP đến tất cả các tiến trình mở thư mục /boot của bạn.
$ sudo fuser -k -HUP /boot
Hãy thử đọc tài liệu fuser để biết thêm tùy chọn sử dụng nâng cao, thông tin bổ sung và chi tiết hơn.
Đó là tất cả cho bây giờ, bạn có thể liên hệ với chúng tôi thông qua phần phản hồi bên dưới để nhận bất kỳ hỗ trợ nào bạn có thể cần hoặc gửi ý kiến đề xuất.