2013-08-01 63 views
15

Tôi muốn biết kthread là gì và tại sao nó không lấy bất kỳ bộ nhớ nào và không có tệp mở. Tôi đã viết một số mã mà chỉ đơn giản là sẽ in PID của các quy trình hiện đang chạy trong một định dạng cây con cha cùng với một số thông tin bổ sung như được sử dụng VMZ, RSS, chủ đề, openfiles. Tất cả trẻ em của PID 2 có tên là kthreadd không có VmSize và VmRSS trong tệp /proc/[pid]/status. /proc/[pid]/fd không chứa bất kỳ tệp đang mở nào.Quy trình kthreadd và trẻ em là gì và nó khác với init và children

Các quy trình này là gì, chúng khác nhau như thế nào với các quy trình bình thường được sinh ra bởi init (PID 1). Tôi đọc (trong một cuốn sách cũ) rằng các swapper sẽ đẻ trứng init PID1 và tất cả các quá trình khác là con của PID 1. Chắc chắn có một kiến ​​trúc khác đằng sau này (Linux kernel 3.7.10.1-16) mà tôi không biết, vì vậy một câu hỏi khác là tại sao PID 2 là một con của PID 0 và không phải là con của PID 1.

+0

Tôi nghĩ rằng đây có thể giúp bạn .... http: // unix. stackexchange.com/questions/13290/init-process-ancestor-of-all-processes – Rex

+0

Câu trả lời này trong unix.stackexchange Không trả lời chi tiết. Tôi cần thêm thông tin chi tiết. – phoxis

Trả lời

17

Chủ đề hạt nhân không phải là con của init vì chúng có thể được bắt đầu trước tất cả các quy trình vùng người dùng.

Chúng thường được sử dụng để quản lý phần cứng đó là lý do tại sao chúng được xử lý trực tiếp bởi hạt nhân và có mức độ ưu tiên cao.

Đối với một quá trình là con của init, nó cần phải được nhân bản từ init và Kthreads không phải đó là lý do tại sao cha mẹ PID của chúng là 0 có nghĩa là "không ai".

Tất cả quá trình userspace thường có một ưu PID đến 1000, chỉ có hạt nhân đề được phép có PID thua kém 1000.

+7

Cảm ơn câu trả lời, nhưng bạn có thể cho tôi một số tham chiếu đến một số tài liệu không? – phoxis