Daemon là gì?


12

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:


15

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ờ.


8
để mở rộng điều này, nếu bạn đến với Linux từ Windows, bạn có thể nghĩ về trình nền như là * nix tương đương với "dịch vụ" của Windows.
nathwill

1
@ stefano-palazzo Bạn đã nói "... nó không có TTY liên quan đến nó", nhưng sau đó "... bạn sẽ nhận thấy, sau hai giây nó sẽ in ...". Tôi nghĩ rằng tách TTY có nghĩa là bạn không thể ghi vào thiết bị đầu cuối.
Jorge Bucaran

1
@JorgeBucaran Có. Việc in ấn là một chút nghịch ngợm. Nó vẫn có thể xử lý luồng đầu ra tiêu chuẩn của tty đã khởi động nó. Khi bạn mở một tệp (như / dev / stdout), bạn sẽ nhận được một số (được gọi là mô tả tệp) và đó là tất cả những gì bạn cần ghi vào nó miễn là quá trình đã mở nó vẫn đang chạy (bạn có thể thấy mở tập tin trong /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.
Stefano Palazzo

1
@StefanoPalazzo Tôi thấy. Người ta có thể giữ lại một tham chiếu đến quá trình std / out / err của cha mẹ và vẫn tách ra khỏi nó. Nếu tôi có thể tùy ý giữ một tham chiếu đến TTY, thì việc tách ra một quy trình có nghĩa là gì? Tôi thấy < superuser.com/questions/178587/ trên > hữu ích, nhưng vẫn cảm thấy không rõ ràng.
Jorge Bucaran

1
@JorgeBucaran có nghĩa là ghi đè lên các stdio của riêng các quy trình (ví dụ: bằng cách sử dụng dup2 ) với các quy trình mới mà bạn đã tạo (như tệp nhật ký). Dưới đây là một ví dụ đầy đủ
Stefano Palazzo

1

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


2
trích dẫn từ đâu
Zanna

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.