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