Лабораторна робота №6
- Напишіть програму, яка обробляє сигнали від користувача (наприклад, SIGINT) та виводить повідомлення про їх отримання.
- Розробіть програму, яка використовує сигнали для керування власними дочірніми процесами (наприклад, SIGCHLD для обробки закінчення дочірнього процесу).
Часткове рішення 1 задачі
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// Функція-обробник сигналів
void signal_handler(int signal) {
printf("Отримано сигнал %d\n", signal);
}
int main() {
// Встановлення обробника сигналу SIGINT (Ctrl+C)
signal(SIGINT, signal_handler);
printf("Натисніть Ctrl+C для відправки сигналу SIGINT\n");
// Безкінечний цикл, щоб програма продовжувала виконуватися
while(1) {
sleep(1);
}
return 0;
}
Часткове рішення 2 задачі
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
// Функція-обробник сигналів
void signal_handler(int signal) {
printf("Отримано сигнал %d\n", signal);
// Очікування закінчення дочірнього процесу
wait(NULL);
}
int main() {
// Встановлення обробника сигналу SIGCHLD
signal(SIGCHLD, signal_handler);
// Створення дочірнього процесу
pid_t pid = fork();
if (pid == 0) {
// Код для дочірнього процесу
printf("Дочірній процес: Виконано\n");
sleep(2);
} else {
// Код для батьківського процесу
printf("Батьківський процес: Створено дочірній процес з PID %d\n", pid);
}
// Безкінечний цикл, щоб програма продовжувала виконуватися
while(1) {
sleep(1);
}
return 0;
}