Tôi nghe rất nhiều cuộc nói chuyện về Daemon chạy trên máy tính Ubuntu của mình - chúng là gì?
Tôi nghe rất nhiều cuộc nói chuyện về Daemon chạy trên máy tính Ubuntu của mình - chúng là gì?
Câu trả lời:
Nói tóm lại, một Daemon là một quá trình nền .
Daemon chỉ có thể là các chương trình bình thường chạy trong nền, tuy nhiên hầu hết được tạo bằng cách bắt đầu một quá trình, loại bỏ nó và thoát khỏi cha mẹ.
Để rẽ nhánh một quá trình có nghĩa là tạo ra một bản sao chính xác của nó. Cha mẹ của quá trình đó, nếu cha mẹ thực sự chấm dứt ngay lập tức, thì bây giờ là quá trình init/sbin/init
, đây là điều đầu tiên bắt đầu trên mọi hệ điều hành giống như Unix. Bây giờ, quá trình này được gọi là Daemon, nó không có TTY liên quan đến nó.
Đây là một ví dụ về Daemon trong Python:
import sys, os, time
pid = os.fork()
# there now exist two processes
if pid > 0: # If this is the parent,
sys.exit(0) # quit.
# this is the background part:
time.sleep(5)
print "Hello, World!"
Nó chưa phải là một, nói đúng ra. Bạn cũng phải thay đổi thư mục làm việc hiện tại, quy định đầu vào và đầu ra tiêu chuẩn thành các tệp nhật ký, v.v. Bạn có thể đọc chi tiết về tin đồn trong bài viết trên wikipedia này .
Nếu bạn chạy ví dụ, bạn sẽ nhận thấy, sau hai giây nó sẽ in, mặc dù quá trình bạn bắt đầu trên dòng lệnh đã kết thúc. Bản sao của quá trình này được chạy 'by' init ngay bây giờ.
/proc/*/fd
). Một daemon cư xử tốt sẽ tách ra hoàn toàn khỏi tty bằng cách từ bỏ tay cầm để stdout, stderr và stdin.
Trong các hệ điều hành máy tính đa nhiệm, daemon là một chương trình máy tính chạy dưới dạng quá trình nền, thay vì chịu sự kiểm soát trực tiếp của người dùng tương tác. Theo truyền thống, tên quá trình của một daemon kết thúc bằng chữ d, để làm rõ rằng trên thực tế, quá trình này là một daemon và để phân biệt giữa một daemon và một chương trình máy tính bình thường. Ví dụ: syslogd là trình nền thực hiện phương tiện ghi nhật ký hệ thống và sshd là trình nền phục vụ các kết nối SSH đến.
Như bạn có thể thấy lớp của Daemon