Лабораторна робота №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;
}