Một zombie có thể có trẻ mồ côi? Những đứa trẻ mồ côi sẽ bị quấy rầy bằng cách gặt hái zombie?


27

Theo tôi hiểu, một quá trình zombie đã chết nhưng vẫn tồn tại như một trình giữ chỗ trong bảng quy trình cho đến khi cha mẹ của nó (hoặc initnếu chính zombie là một đứa trẻ mồ côi) kiểm tra trạng thái thoát của nó.

Và sự hiểu biết của tôi về các quá trình mồ côi là chúng là các quá trình vẫn còn sống và đang chạy nhưng có cha mẹ đã chết.

Vì một thây ma đã chết, những đứa trẻ của nó sẽ được coi là trẻ mồ côi, phải không? Họ sẽ bị ảnh hưởng khi gặt hái zombie? Cụ thể, sẽ initnhận nuôi chúng như con của nó chỉ khi zombie được gặt, hoặc chúng sẽ được nhận nuôi ngay khi cha mẹ trở thành zombie?


Thật có ý nghĩa cho các quá trình con được initsửa chữa ngay khi cha mẹ chúng chết (và điều đó bao gồm việc nó trở thành một thây ma). Một zombie sẽ không chăm sóc con của nó. Nó sẽ không làm gì cả. Đó chỉ là một thông tin về tình trạng tử vong trôi nổi tại một pidđiểm.
PSkocik

Điều đó có nghĩa là trẻ mồ côi của zombie không thể trở thành zombie, bởi vì chúng ngay lập tức được chăm sóc init?
tự đại diện

Chính xác. Hoặc nếu chúng trở thành zombie, nó sẽ chỉ trong một khoảng thời gian rất nhỏ cho đến khi initgặt hái được chúng.
PSkocik

6
Tôi không thể đợi cho đến khi tiêu đề của câu hỏi này xuất hiện trong phần "Câu hỏi về mạng nóng" ...
Nathan Osman

@NathanOsman, điều đó thật tuyệt vời nhưng có vẻ như không có. :(
tự đại diện

Câu trả lời:


15

Theo tôi hiểu, một quá trình zombie đã chết nhưng vẫn tồn tại như một trình giữ chỗ trong bảng quy trình cho đến khi cha mẹ của nó (hoặc init nếu zombie tự nó là một đứa trẻ mồ côi) kiểm tra trạng thái thoát của nó.

Chính xác.

Và sự hiểu biết của tôi về các quá trình mồ côi là chúng là các quá trình vẫn còn sống và đang chạy nhưng có cha mẹ đã chết.

Chính xác.

Vì một thây ma đã chết, những đứa trẻ của nó sẽ được coi là trẻ mồ côi, phải không?

Vâng. Khi cha mẹ chết, nó đã chết. Đối với con cái, việc cha mẹ ở lại như một thây ma không quan trọng: con cái trở thành trẻ mồ côi vào lúc cha mẹ chết, và sau đó chúng mất bất kỳ mối liên hệ nào với cha mẹ.

Họ sẽ bị ảnh hưởng khi gặt hái zombie? Cụ thể, liệu init sẽ nhận nuôi chúng như con của nó chỉ khi zombie được gặt, hay chúng sẽ được nhận nuôi ngay khi bố mẹ trở thành zombie?

Không, và sau này, như trên.


8

Nếu kết quả thử nghiệm sẽ làm, ít nhất thì nó sẽ xuất hiện systemdnhững đứa trẻ mồ côi của zombie ngay khi có thể:

foo.c:

#include <unistd.h>

int main(void)
{
    pid_t child = fork();
    if (child < 0)
        return -1;
    if (child == 0)
    {
        pid_t grand_child = fork();
        if (grand_child < 0)
            return -1;
        if (grand_child == 0)
            sleep (1000);
        else
            return 0;
    }
    else
        sleep (1000);
    return 0;
}

Trong một thiết bị đầu cuối:

$ gcc -o foo foo.c
$ ./foo

Trong một thiết bị đầu cuối khác:

$ pgrep foo                         
25548
25549
25550
$ pstree -pa 25548
foo,25548
  └─(foo,25549)
$ pstree -psa 25550
systemd,1
  └─foo,25550
$ ps -o stat,pid -p $(pgrep -d, foo)
STAT   PID
S+   25548
Z+   25549
S+   25550

Và nó cũng nên, đó là công việc của nó.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles chắc chắn, thu thập trẻ mồ côi là công việc của init, nhưng có một số tiêu chuẩn quy định khi nào nên thu thập? Nếu không, tôi tưởng tượng việc thực hiện có thể có một số chậm trễ.
muru

Tôi không nghĩ rằng có một tiêu chuẩn bằng văn bản cho điều đó. POSIX chỉ tuyên bố rằng ID quy trình cha mẹ của tất cả các quy trình con và quy trình zombie hiện có của quy trình gọi sẽ được đặt thành ID quy trình của quy trình hệ thống do triển khai xác định. phải làm, hoặc thậm chí làm thế nào quá trình hệ thống được thông báo. Trong các hệ thống Unix, quy trình hệ thống đó là PID 1, nó nhận được SIGCLD và nó gặt hái các quy trình ngay khi có xung quanh nó.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles có nghĩa là có thể có một số init (có thể là kinemortophobic) ở đâu đó quyết định trì hoãn việc gặt hái những đứa trẻ của zombie cho đến khi zombie biến mất?
muru

Bạn cũng có thể muốn nhắc Gilles về unix.stackexchange.com/a/177361/5132 . Đã gần 4 năm rồi. ☺
JdeBP
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.