Trong thế giới Linux, thuật ngữ “daemon” thường xuyên xuất hiện khi bạn làm việc với các chương trình và dịch vụ. Vậy daemon là gì và nó đóng vai trò gì trong hệ điều hành Linux? Bài viết này của Sen Tây Hồ sẽ cung cấp cho bạn cái nhìn chi tiết về daemon, từ khái niệm cơ bản đến các đặc điểm và ứng dụng quan trọng của nó.
Hình ảnh minh họa khái niệm daemon trong Linux, một tiến trình chạy ẩn dưới nền hệ thống, thực hiện các tác vụ quan trọng mà không cần sự tương tác trực tiếp từ người dùng.
Mục Lục
Daemon là gì?
Daemon là một loại chương trình đặc biệt trong các hệ điều hành giống Unix (Like-Unix), hoạt động ẩn dưới nền (background) mà không cần sự kiểm soát trực tiếp của người dùng. Daemon thường được kích hoạt bởi một sự kiện hoặc điều kiện cụ thể nào đó. Khi chạy nền liên tục, daemon phục vụ các yêu cầu cho các dịch vụ khác nhau của hệ thống.
Thuật ngữ “daemon” bắt nguồn từ Unix, nhưng hầu hết các hệ điều hành hiện đại đều sử dụng các tiến trình background tương tự. Trong Unix, tên của các daemon thường kết thúc bằng chữ “d”. Một số ví dụ phổ biến bao gồm inetd, httpd, nfsd, sshd và lpd.
Đặc điểm của Daemon
Daemon có nhiều đặc điểm quan trọng giúp chúng hoạt động hiệu quả trong hệ thống Linux:
- Hoạt động liên tục: Daemon hoạt động liên tục trong background, sẵn sàng phục vụ các yêu cầu từ hệ thống hoặc người dùng.
- Không tương tác trực tiếp: Daemon không yêu cầu hoặc tương tác trực tiếp với người dùng thông qua giao diện dòng lệnh hoặc giao diện đồ họa.
- Phản hồi sự kiện: Daemon thường được kích hoạt bởi một sự kiện cụ thể, chẳng hạn như một yêu cầu mạng, một thay đổi trong hệ thống tệp hoặc một lịch trình định trước.
- Quản lý dịch vụ hệ thống: Daemon thực hiện nhiều dịch vụ hệ thống quan trọng, bao gồm dịch vụ mạng, in ấn và quản lý phần cứng.
- Tách biệt khỏi tiến trình cha: Daemon tách ra khỏi tiến trình cha đã tạo ra nó, cho phép nó tiếp tục chạy ngay cả khi người dùng đã đăng xuất hoặc tiến trình cha đã kết thúc.
- Độc lập với thiết bị đầu cuối: Daemon không gắn liền với bất kỳ thiết bị đầu cuối kiểm soát nào, cho phép chúng hoạt động mà không bị ảnh hưởng bởi các hoạt động của người dùng trên thiết bị đầu cuối.
- Thay đổi thư mục gốc: Daemon thường thay đổi thư mục gốc của chúng thành “/” để tách liên kết khỏi các thư mục cụ thể.
- Thiết lập quyền mặc định: Daemon thường thiết lập quyền mặc định (umask) thành 0 để bỏ qua mọi quyền mà tiến trình có thể đã thừa hưởng.
- Đóng và mở lại file descriptors: Daemon thường đóng tất cả các file descriptors không cần thiết và mở lại những file descriptors cần thiết cho hoạt động của chúng.
Một trong những lý do chính để biến một chương trình thành daemon là để nó có thể tiếp tục chạy ngay cả khi bạn đã đăng xuất. Điều này cho phép bạn tách chức năng của chương trình khỏi việc bạn đã đăng nhập hay chưa. Khi bạn chạy một daemon, nó sẽ tiếp tục chạy cho đến khi nó bị tắt một cách rõ ràng hoặc gặp phải một lỗi nghiêm trọng.
Hình ảnh minh họa tiến trình daemon trong Linux, cho thấy cách daemon hoạt động độc lập và liên tục, quản lý các tác vụ hệ thống quan trọng dưới nền.
Daemon cũng có thể được sử dụng để giám sát hệ thống. Cron có thể chạy các quy trình theo lịch trình, nhưng nếu bạn cần độ chi tiết cao hơn, daemon có thể là một giải pháp tốt hơn. Với daemon, bạn có thể thiết lập thời gian thực hiện bất cứ lúc nào bạn muốn trong “vòng lặp chính” của mình và kiểm tra các sự kiện như sự tồn tại của tệp, trạng thái ổ đĩa hoặc bất kỳ điều gì khác bằng cách sử dụng inotify hoặc các phương tiện khác.
Tiến trình và Daemon
Daemon thường được khởi tạo như một tiến trình (process). Một tiến trình là một thể hiện đang chạy của một chương trình, với các chức năng cụ thể. Mỗi tiến trình được quản lý bởi Kernel (phần lõi của hệ điều hành) và được gán một PID (process identification number) duy nhất.
Trong Linux, có ba loại tiến trình chính:
- Tiến trình tương tác (interactive process): Chạy tương tác với người dùng thông qua giao diện dòng lệnh (terminal ssh hoặc console).
- Tiến trình hàng loạt (batch process): Được gửi vào hàng đợi để thực thi theo lịch trình và không liên kết tương tác với dòng lệnh. Loại tiến trình này phù hợp cho các tác vụ lặp đi lặp lại khi sử dụng hệ thống ở mức thấp.
- Daemon: Được hệ thống xác định với bất kỳ tiến trình nào có process parent PID là 1 (tiến trình init). Init luôn là tiến trình đầu tiên khởi động khi máy chủ khởi động và tồn tại cho đến khi máy chủ tắt. Init chấp nhận bất kỳ tiến trình nào có parent process bị kill mà không cần quan tâm đến trạng thái của child process.
Phương pháp phổ biến để khởi chạy một daemon là sử dụng forking (chia) một hoặc hai lần và sau đó tắt các process cũ (parent process, grandparent process), trong khi các process con (child process hoặc grandchild process) tiếp tục thực hiện các chức năng bình thường của chúng.
Khởi động Daemon
Một số daemon được khởi chạy thông qua các script init của System V hoặc hệ thống quản lý Systemd. Đây là các script (chương trình ngắn) được chạy tự động khi hệ thống khởi động. Chúng có thể tồn tại trong suốt thời gian của session hoặc được khởi tạo lại sau một khoảng thời gian.
Ngoài việc được khởi động bởi hệ điều hành, một số daemon được khởi động thủ công bằng các lệnh như mysqld, apache hoặc nginx. Trong nhiều hệ thống Like-Unix, mỗi daemon có một script riêng để dừng, khởi động lại hoặc kiểm tra trạng thái của nó.
Nguồn gốc của thuật ngữ “Daemon”
Thuật ngữ “daemon” có nguồn gốc từ các daemon trong thần thoại Hy Lạp, những sinh vật siêu nhiên có kiến thức uyên thâm và quyền lực, đứng giữa các vị thần và con người. Socrates từng nói rằng ông có một daemon đưa ra cảnh báo và lời khuyên nhưng không bao giờ ép buộc ông phải tuân theo.
Từ “daemon” được sử dụng lần đầu tiên trong dự án MAC (sau này trở thành phòng lab MIT) sử dụng IBM 7094 vào năm 1963. Cách dùng từ ngữ này được lấy cảm hứng từ các daemon trong vật lý và nhiệt động lực học của Maxwell, những người đã giúp phân loại các phân tử có tốc độ khác nhau. Thuật ngữ này cũng mô tả quá trình hoạt động không ngừng nghỉ của các process trong hệ thống dưới background. Sau này, nó còn được diễn giải với cách dùng từ viết tắt của “Disk And Execution Monitor”.
Kết luận
Daemon đóng vai trò quan trọng trong hệ điều hành Linux, đảm bảo các dịch vụ hệ thống chạy liên tục và hiệu quả. Hiểu rõ về daemon giúp bạn quản lý và vận hành hệ thống Linux một cách tốt hơn. Sen Tây Hồ hy vọng bài viết này đã cung cấp cho bạn những thông tin hữu ích về daemon. Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại bình luận bên dưới.
