#include #include #include #include #include #include /* Program tworzy proces potomny, potem tworzy proces potomny procesu potomnego. Proces macierzysty zmiania standardową funkcję obsługi sygnału wywoływanego przy zakończeniu procesu potomnego. Proszę zwrócić uwagę na fakt, że niestandardowa funkcja obsługi sygnału jest ważna tylko do pierwszego jej użycia, potem jest używana ponownie standardowa funkcja obsługi sygnału. Aby ciągle była używana niestandardowa funcja obsługi sygnału, należy w niestandardowej funkcji obsługi sygnału rejestrować ją jako funkcję obsługi sygnału dla tego konkretnego sygnału. */ void dziecko(int i) { printf("Dostalem sygnal, numer procesu %d. i:%d\n", getpid(), i); wait(NULL); // signal(SIGCHLD, dziecko); } int main(int argc, char *argv[]) { int pid = 0, ppid; ppid = getpid(); printf("Przed wywolaniem funkcji fork. Rodzic ma numer %d.\n", ppid); signal(SIGCHLD, dziecko); if ((pid = fork()) == -1) { perror("Pomyslne zakonczenie funkcji fork nie jest mozliwe.\n"); exit(1); } else { if (pid != 0) { sleep(10); } else { printf("Dziecko ma numer %d.\n", getpid()); sleep(2); pid = fork(); if (pid != 0) { printf("Dziecko dziecka ma numer %d.\n", pid); sleep(2); } } } }