- những lợi ích từ khái niệm quá trình zombie?
Quá trình zombie chỉ là một pid, trạng thái thoát và một số thông tin kế toán nằm xung quanh cho đến khi cha mẹ sử dụng một trong các họ gọi hệ thống wait
để có trạng thái cuối cùng. Cho đến khi cha mẹ gọi số wait
, ID quá trình của trẻ phải được đánh dấu là đã sử dụng để không có quá trình nào khác có thể được chỉ định. Nếu một quá trình khác được giao một pid tái chế thì sẽ rất khó để nói sự khác biệt giữa nó và các tiến trình trước đó có cùng pid đó. Khi wait
được cha mẹ gọi và trả về trạng thái thoát cuối cùng, có thể giả định rằng sẽ không có ai tìm kiếm đứa trẻ ở đó nữa, do đó, bây giờ pid có thể được sử dụng lại. (Tôi nghĩ rằng trên Linux nếu cha mẹ rời SIGCHLD là SIG_IGN hạt nhân sẽ không giữ zombie xung quanh, nhưng việc đăng ký lại SIGCHLD là SIG_IGN không có cùng tác dụng)
- biết rằng hạt nhân giữ (PID , tình trạng chấm dứt, sử dụng tài nguyên thông tin) cho quá trình zombie ý nghĩa của "thông tin sử dụng tài nguyên"
một số thông tin này là những gì chạy một chương trình như là những gì:
time my_program
sẽ báo cáo. Các giá trị này thường được báo cáo trong cấu trúc siginfo cho SIGCHLD (không chính xác là một cuộc gọi tới wait
) nhưng cũng có sẵn từ một cuộc gọi đến dạng gọi systme waitid
(trên một số hệ thống). Hãy xem man sigaction
để biết thông tin về cấu trúc này.
- làm thế nào PPID zombie của() = 1 và nó vẫn zombie, (init gặt Zombies vì nó chờ đợi() theo mặc định)
Một zombie có ppid = 1 không nên ở một zombie cho rất dài vì init sẽ gặt hái nó khá nhanh chóng. Một quá trình sẽ vẫn là một zombie từ một điểm ngay sau khi nó chết (hoặc thông qua exit
hoặc bởi một tín hiệu unhanded giết chết nó) cho đến khi cha mẹ gọi wait
và nhận được tình trạng cuối cùng của nó. Điều này có nghĩa là ngay cả khi init không làm gì ngoài việc gọi init và hơn nữa, có thể có một khoảng thời gian nhỏ mà một quá trình có thể xuất hiện như một zombie.Nếu các quá trình hiển thị dưới dạng con của init (0 = ppid) trong một khoảng thời gian dài (giây) thì có thể có sự cố.
- bất kỳ ai có thể viết một số mã C để tạo ra một zombie là cha mẹ của nó là Init?
Đây không phải là rõ ràng, nhưng tôi nghĩ rằng bạn muốn:
pid_t f = fork();
if (f > 0) {
exit(0); // this is the parent dying, so the child will be an orphan
// and get adopted by init
} else if (f == 0) {
sleep(100); // This is the child doing something that takes enough time for
// its parent to commit suicide (exit(0)) and then for you to
// observe that it has now been adopted by init
exit(0); // And now it dyes as well, so init should reap its status, but
// it may be a zombie for a short amount of time first.
} else /* error condition would be handled here */
- zombie có thể từ chối để phát hành một số khóa trên bộ nhớ ??
Zombies không thể nắm giữ nhiều thứ. Họ mất tất cả các trang bộ nhớ của họ, mở xử lý tập tin, ... vv. Khá nhiều thứ mà hệ điều hành có thể tìm ra cách giải phóng nên được giải phóng. Nó sẽ là một lỗi không, nhưng hãy nhớ rằng hệ điều hành phải biết rằng nó là cái gì đó được cho là sẽ được giải thoát. Nó rất dễ dàng để tạo ra các tài nguyên trong không gian người dùng cần được giải phóng khi một chương trình chết mà hệ điều hành không biết được cho là sẽ được giải thoát.
Thuộc về superuser.com –
@Paul R Tôi không nghĩ vậy, những thứ này có trong lập trình hệ thống. – Searock