Bisakah zombie memiliki anak yatim? Akankah anak-anak yatim diganggu dengan menuai zombie?

27

Seperti yang saya pahami, proses zombie telah mati tetapi masih ada sebagai pengganti dalam tabel proses sampai orang tuanya (atau initjika zombie itu sendiri adalah yatim piatu) memeriksa status keluarnya.

Dan pemahaman saya tentang proses anak yatim adalah proses yang masih hidup dan berjalan tetapi orang tuanya telah meninggal.

Karena zombie sudah mati, anak-anaknya akan dianggap yatim piatu, bukan? Apakah mereka akan terkena dampak menuai zombie? Khususnya, akan initmengadopsi mereka sebagai anak-anaknya hanya setelah zombie itu menuai, atau apakah mereka akan diadopsi segera setelah orang tua menjadi zombie?

Wildcard
sumber
Masuk akal bagi proses anak untuk mendapatkan reparasi initsegera setelah orang tua mereka meninggal (dan itu termasuk menjadi zombie). Zombie tidak akan merawat anak-anaknya. Itu tidak akan melakukan apa-apa. Itu hanya informasi status kematian yang mengambang di suatu pidtempat.
PSkocik
Apakah itu berarti bahwa anak yatim zombie tidak dapat menjadi zombie, karena mereka segera dirawat init?
Wildcard
Benar. Atau jika mereka benar-benar menjadi zombie, itu hanya untuk periode waktu yang sangat kecil sampai initmenuai mereka.
PSkocik
6
Saya tidak sabar menunggu sampai judul pertanyaan ini muncul di bagian "Pertanyaan Jaringan Panas" ...
Nathan Osman
@NathanOsman, itu akan luar biasa tetapi sepertinya tidak jalan. :(
Wildcard

Jawaban:

15

Seperti yang saya pahami, proses zombie telah mati tetapi masih ada sebagai pengganti dalam tabel proses sampai orang tuanya (atau init jika zombie itu sendiri adalah yatim piatu) memeriksa status keluarnya.

Benar.

Dan pemahaman saya tentang proses anak yatim adalah proses yang masih hidup dan berjalan tetapi orang tuanya telah meninggal.

Benar.

Karena zombie sudah mati, anak-anaknya akan dianggap yatim piatu, bukan?

Iya nih. Ketika orang tua meninggal, itu sudah mati. Sehubungan dengan anak-anaknya, tidak masalah apakah orang tua tetap sebagai zombie: anak-anak menjadi yatim piatu pada saat orang tua meninggal, dan kemudian mereka kehilangan hubungan dengan orang tua mereka.

Apakah mereka akan terkena dampak menuai zombie? Secara khusus, akankah init mengadopsi mereka sebagai anak-anaknya hanya setelah zombie dipetik, atau apakah mereka akan diadopsi segera setelah orang tua menjadi zombie?

Tidak, dan yang terakhir, seperti di atas.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
8

Jika hasil eksperimental akan dilakukan, tampaknya systemdinit setidaknya akan menuai anak yatim zombie secepatnya:

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;
}

Di satu terminal:

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

Di terminal lain:

$ 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
muru
sumber
Dan memang seharusnya begitu, itulah tugasnya.
Gilles 'SO- berhenti menjadi jahat'
@Gilles yakin, mengumpulkan anak yatim adalah pekerjaan init, tetapi apakah ada beberapa standar yang menentukan kapan harus dikumpulkan? Kalau tidak, saya membayangkan implementasi bisa memiliki beberapa kelonggaran.
muru
Saya tidak berpikir ada standar tertulis untuk itu. POSIX hanya menyatakan bahwa "ID proses induk dari semua proses anak yang ada dan proses zombie dari proses pemanggilan harus diatur ke ID proses dari proses sistem yang ditentukan-implementasi.", Ia tidak mengatakan apa proses sistem itu yang seharusnya dilakukan, atau bahkan bagaimana proses sistem itu diinformasikan. Di bawah sistem Unix, proses sistem itu adalah PID 1, ia menerima SIGCLD, dan ia menuai proses segera setelah ia sampai di sana.
Gilles 'SO- berhenti menjadi jahat'
@Gilles berarti mungkin ada beberapa (mungkin kinemortophobic) init di suatu tempat yang memutuskan untuk menunda menuai anak-anak zombie sampai zombie hilang?
muru
Anda mungkin juga ingin mengingatkan Gilles tentang unix.stackexchange.com/a/177361/5132 . Sudah hampir 4 tahun, sekarang. ☺
JdeBP