Dalam bahagian ini, kita akan belajar cara melaksanakan proses zombi dan anak yatim dalam satu program dalam C/C++. Sebelum sampai ke intinya, mari kita fahami dahulu apa itu proses zombi dan proses yatim.
Proses Zombie merujuk kepada proses yang telah selesai pelaksanaan tetapi masih mempunyai ruang yang tinggal. Kemasukan dalam jadual proses. Proses zombi biasanya berlaku dalam proses anak kerana proses induk masih perlu membaca status keluar proses anaknya. Sebaik sahaja ini dilakukan menggunakan panggilan sistem tunggu, proses zombie dihapuskan daripada jadual proses. Ini dipanggil proses zombi penuaian.
Proses yatim ialah proses yang masih berjalan walaupun proses induknya telah ditamatkan atau selesai. Sesuatu proses mungkin menjadi yatim secara sengaja atau tidak sengaja.
Proses anak yatim yang sengaja akan berjalan di latar belakang tanpa sebarang sokongan manual. Ini biasanya dilakukan untuk memulakan perkhidmatan yang berjalan selama-lamanya atau untuk menyelesaikan kerja yang berjalan lama tanpa disedari oleh pengguna.
Proses anak yatim dibuat secara tidak sengaja apabila proses induknya ranap atau ditamatkan. Gunakan mekanisme kumpulan proses untuk mengelakkan proses anak yatim yang tidak disengajakan.
Kini dalam kod di bawah kita akan melaksanakan proses zombie dan proses anak yatim secara serentak. Di sini kita mempunyai proses induk, yang mempunyai proses anak, dan proses anak ini mempunyai proses anak yang lain. Jika kawalan kami dimasukkan ke dalam proses anak, maka kami akan menghentikan pelaksanaan selama 5 saat supaya ia dapat menyelesaikan proses induk. Oleh itu proses anak menjadi proses yatim. Proses cucu kemudiannya akan ditukar menjadi proses zombi. Proses cucu menyelesaikan pelaksanaan apabila proses induknya (anak proses utama) tidur selama 1 saat. Oleh itu, proses cucu tidak akan memanggil tamat dan kemasukannya akan wujud dalam jadual proses.
#include <stdio.h> #include <unistd.h> int main() { int x = fork(); //create child process if (x > 0) //if x is non zero, then it is parent process printf("Inside Parent---- PID is : %d</p><p>", getpid()); else if (x == 0) { //for chile process x will be 0 sleep(5); //wait for some times x = fork(); if (x > 0) { printf("Inside Child---- PID :%d and PID of parent : %d</p><p>", getpid(), getppid()); while(1) sleep(1); printf("Inside Child---- PID of parent : %d</p><p>", getppid()); }else if (x == 0) printf("Inside grandchild process---- PID of parent : %d</p><p>", getppid()); } return 0; }
soumyadeep@soumyadeep-VirtualBox:~$ ./a.out Inside Parent---- PID is : 3821 soumyadeep@soumyadeep-VirtualBox:~$ Inside Child---- PID :3822 and PID of parent : 686 Inside grandchild process---- PID of parent : 3822 soumyadeep@soumyadeep-VirtualBox:~$
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan proses zombi dan anak yatim dalam satu program C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!