#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
void usr1_handler(int sig) {
printf("Родитель [%d]: получен SIGUSR1.\n", getpid());
}
void usr2_handler(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);
kill(getppid(), SIGUSR1);
printf("Потомок [%d]: отправляю SIGUSR2 родителю [%d].\n",
getpid(), getppid());
kill(getppid(), SIGUSR2);
exit(0);
} else { /* родитель */
signal(SIGUSR1, usr1_handler);
signal(SIGUSR2, usr2_handler);
printf("Родитель [%d]: жду сигналы от потомка [%d]...\n",
getpid(), pid);
wait(NULL);
}
return 0;
}