Дефинирайте обработчик на сигнал за прекратяване на изпълнението. Инициализирайте променливи за използване на обработчик на сигнал. Задайте действие при SIGCHLD, изход при грешка. Направете 10 пъти следното: създайте дъщерен процес и запазете неговия идентификатор (pid). Родителският процес отпечатва идентификатора на дъщерният процес. Дъщерният процес отпечатва съобщение и излиза.
zombie-test.c
#include<sys/types.h>#include<sys/wait.h>#include<signal.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<errno.h>staticvoidsigchld_hdl (int sig){while (waitpid(-1,NULL, WNOHANG)>0) {}}intmain (int argc,char*argv[]){struct sigaction act;memset (&act,0,sizeof(act));act.sa_handler = sigchld_hdl;if (sigaction(SIGCHLD,&act,0)) {perror ("sigaction");return1; }for (int i =0; i <10; i++) {int pid =fork();if (pid ==0) {printf("I will leave no zombie\n");exit(0); } elseprintf("Created a process with the PID %i\n", pid); }while (1) sleep(1);return0;}