sự khác biệt kỹ thuật giữa daemon, dịch vụ và quy trình là gì?


121

Tôi muốn biết rằng sự khác biệt trong hành vi của một daemon, quy trình và dịch vụ đang chạy trong Ubuntu.


3
Điều này phù hợp hơn với StackOverflow, nơi nó đã được hỏi và trả lời một cách thuận tiện .
Tom Brossman

5
@Tom: Không, bài SE đó không trả lời dịch vụ là gì. Và tổng thể các câu trả lời ở đây là công phu hơn.
Mads Skjern

3
@TomBrossman, Bài đăng bạn liên kết không nói gì về dịch vụ .
Pacerier

4
StackOverflow là về mã hóa. deamons là một thứ unix, không có nơi nào tốt hơn để hỏi hơn ở đây
Mr.Robot

1
Huh? Làm thế nào câu hỏi này có thể được đóng lại?
Jacob Vlijm

Câu trả lời:


123

Daemons - Daemon không đại diện cho giám sát đĩa và thực thi ( http://www.takeourword.com/TOW146/page4.html ). Chúng là các quá trình chạy trong nền và không tương tác. Họ không có thiết bị đầu cuối kiểm soát.

Họ thực hiện một số hành động nhất định tại thời điểm được xác định trước hoặc để đáp ứng với các sự kiện nhất định. Trong * NIX, tên của daemon kết thúc bằng d .

Dịch vụ - Trong Windows, trình nền được gọi là dịch vụ .

Nếu bạn đang tự hỏi tại sao * NIX có một lệnh có tên là dịch vụ , thì nó chỉ được sử dụng để chạy các tập lệnh init (viết tắt cho việc khởi tạo scriptrunlevel ).

Quy trình - Quy trình là một chương trình đang chạy. Tại một thời điểm cụ thể, nó có thể là chạy , ngủ hoặc zombie (quá trình đã hoàn thành, nhưng chờ quá trình cha mẹ của nó nhận giá trị trả về).

Nguồn và thông tin thêm :


2
Các quy trình có thêm một vài trạng thái trên Linux, đây là một sơ đồ tuyệt vời: linux-tutorial.info/modules.php?name=MContent&pageid=84
Dietrich Epp

Đoạn tài liệu chính thức này của Ubuntu nói về "dịch vụ" và tôi nghĩ họ không nói về Windows! Vì vậy, tôi chỉ nên đọc nó như daemon? help.ubfox.com/community/UbfoxBootupHowto
Mads Skjern

1
Trong thực tế, OP hỏi về các dịch vụ trong Ubuntu, trong khi câu trả lời này nói về các dịch vụ trên Windows. Vì vậy, rõ ràng câu trả lời của Anon là câu trả lời đúng
Mads Skjern

theo serverfault.com/questions/129055/ daemons và dịch vụ không giống nhau
Mr.Robot

41
  1. Một daemon là một nền tảng, chương trình không tương tác . Nó được tách ra khỏi bàn phím và hiển thị của bất kỳ người dùng tương tác nào. Từ daemon để biểu thị một chương trình nền là từ văn hóa Unix; nó không phải là phổ quát

  2. Một dịch vụ là một chương trình mà đáp ứng các yêu cầu từ các chương trình khác qua một số cơ chế giao tiếp liên quá trình (thường là qua mạng). Một dịch vụ là những gì một máy chủ cung cấp. Ví dụ, dịch vụ ánh xạ cổng NFS được cung cấp dưới dạng dịch vụ portmap riêng, được triển khai dưới dạng portmapddaemon.

    Một dịch vụ không phải là một daemon, nhưng thường là vậy. Một ứng dụng người dùng có GUI có thể có một dịch vụ được tích hợp trong đó: ví dụ: ứng dụng chia sẻ tệp. Một ví dụ khác là dịch vụ X Window, là bất cứ thứ gì ngoại trừ trong nền: nó chiếm lấy màn hình, bàn phím và thiết bị trỏ của bạn. Đây là một dịch vụ vì nó đáp ứng các yêu cầu từ các ứng dụng (để tạo và thao tác với windows, et cetera), thậm chí có thể ở bất kỳ nơi nào khác trên mạng. Nhưng dịch vụ X cũng đáp ứng mọi cử động gõ phím và chuột của bạn.

  3. Một quy trình là một hoặc nhiều luồng thực thi cùng với bộ tài nguyên được chia sẻ của chúng, trong đó quan trọng nhất là không gian địa chỉ và mô tả tệp mở. Một quá trình tạo ra một môi trường cho các luồng thực thi này trông giống như chúng có toàn bộ máy: đó là một máy ảo.

    Bên trong một quy trình, tài nguyên của các quy trình khác và của hạt nhân là vô hình và không thể truy cập trực tiếp (ít nhất là không phải là một luồng đang thực thi mã không gian người dùng). Ví dụ, không có cách nào để tham khảo các tệp đang mở của một quá trình khác, hoặc không gian bộ nhớ của chúng; như thể những thứ đó thậm chí không tồn tại.

    Quá trình và mối quan hệ của nó với kernel và các tiến trình khác, có lẽ tạo thành sự trừu tượng hóa quan trọng nhất trong các hệ điều hành giống như Unix. Các tài nguyên của hệ thống được phân chia thành các quy trình và gần như mọi thứ được hiểu là xảy ra bên trong quy trình này hay quy trình khác.


Bạn không thể có được bộ nhớ của các quá trình khác bằng cách truy vấn trực tiếp vào RAM của hệ thống?
Pacerier

1
Một quá trình thường không thể truy vấn trực tiếp vào RAM của hệ thống. Các hệ điều hành hiện đại sử dụng không gian địa chỉ ảo ( en.wikipedia.org/wiki/Virtual_address_space ), có nghĩa là mỗi quy trình chỉ có thể tương tác với chế độ xem giả của bộ nhớ trong đó HĐH kiểm soát chính xác những gì có thể truy cập.
akroy

"Một quá trình tạo ra một môi trường cho các luồng thực thi này, trông giống như chúng có toàn bộ máy: đó là một máy ảo." Cách đặt rất hay, không bao giờ nghĩ về nó như vậy rõ ràng như vậy. Nhưng tất nhiên sự trừu tượng đang bị rò rỉ. Giống như, một quá trình có thể đo thời gian (mà nó có thể thực hiện thông qua bộ xử lý) có thể nhận thấy rằng nó không đơn độc trên máy. Và tất nhiên HĐH không cung cấp các cơ chế để liệt kê các quy trình khác.
masterxilo
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.