Đầu tiên, tổ tiên của người Hồi giáo không giống với cha mẹ của Google. Tổ tiên có thể là cha mẹ cha mẹ của cha mẹ và hạt nhân chỉ theo dõi một cấp độ. Tuy nhiên, khi một tiến trình chết, con của nó được áp dụng bởi init, vì vậy bạn sẽ thấy rất nhiều tiến trình có cha mẹ là 1 trên một hệ thống điển hình.
Ngoài ra, các hệ thống Linux hiện đại cũng có một vài quy trình thực thi mã hạt nhân, nhưng được quản lý theo quy trình của người dùng, liên quan đến lập lịch. (Chúng không tuân theo các quy tắc quản lý bộ nhớ thông thường vì chúng đang chạy mã hạt nhân.) Các quy trình này đều được sinh ra bởi kthreadd
(đó là init của các luồng nhân). Bạn có thể nhận ra chúng bằng ID tiến trình cha mẹ của chúng (2) hoặc, thông thường, bằng cách ps
liệt kê chúng với một tên giữa dấu ngoặc vuông hoặc bởi thực tế /proc/2/exe
(thông thường một liên kết tượng trưng đến quá trình thực thi quy trình) không thể đọc được.
Các quy trình 1 ( init
) và 2 ( kthreadd
) được tạo trực tiếp bởi kernel khi khởi động, vì vậy chúng không có cha mẹ. Giá trị 0 được sử dụng trong trường ppid của chúng để chỉ ra điều đó. Hãy nghĩ về 0 có nghĩa là bản thân hạt nhân bản thân ở đây.
Linux cũng có một số phương tiện cho kernel để bắt đầu các tiến trình của người dùng có vị trí được chỉ định thông qua tham số sysctl trong một số trường hợp nhất định. Ví dụ, hạt nhân có thể kích hoạt các sự kiện tải mô-đun (ví dụ: khi phần cứng mới được phát hiện hoặc khi một số giao thức mạng được sử dụng lần đầu tiên) bằng cách gọi chương trình trong kernel.modprobe
giá trị sysctl. Khi một chương trình bỏ lõi, kernel gọi chương trình được chỉ định bởi kernel.core_pattern
nếu có.
init
là "tổ tiên" của tất cảuser threads
, trong khi đó[kthreadd ]
là "cha mẹ" của tất cảkernel threads
, phải không? Cám ơn!