#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
void parent_handler1(int sig) {
printf("Родитель [%d]: получен SIGUSR1 от потомка.\n", getpid());
}
void parent_handler2(int sig) {
printf("Родитель [%d]: получен SIGUSR2 от потомка.\n", getpid());
}
int main() {
pid_t pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
}
if (pid == 0) { /* потомок */
sleep(2);
printf("Потомок [%d]: отправляю SIGUSR1 родителю [%d].\n", getpid(), getppid());
kill(getppid(), SIGUSR1);
sleep(1);
printf("Потомок [%d]: отправляю SIGUSR2 родителю [%d].\n", getpid(), getppid());
kill(getppid(), SIGUSR2);
exit(0);
} else { /* родитель */
signal(SIGUSR1, parent_handler1);
signal(SIGUSR2, parent_handler2);
printf("Родитель [%d]: жду сигналы от потомка [%d]...\n", getpid(), pid);
wait(NULL);
}
return 0;
}