Sobes.tech
Junior — Middle

Оё метавонед шарҳи кунед, ки сигнали SIGCHLD дар системаи оператсионӣ чӣ маъно дорад?

sobes.tech AI

Ҷавоб аз AI

Сигнал SIGCHLD в операционните системи Unix/Linux се изпраща на родителския процес, когато един от неговите дъщерни процеси приключи или промени състоянието си (например, спира или се възобновява).

Родителят може да обработи този сигнал, за да узнае кога е приключил дъщерният процес и да освободи свързаните с него ресурси (например, като извика wait() или waitpid()), като по този начин предотвратява появата на зомби процеси.

Пример за обработка на SIGCHLD на C:

#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>

void sigchld_handler(int signo) {
    int status;
    while (waitpid(-1, &status, WNOHANG) > 0) {
        printf("Дъщерен процес приключи\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // дъщерен процес
        _exit(0);
    }
    // родителски процес
    pause(); // изчакване на сигнали
    return 0;
}

По този начин SIGCHLD помага ефективно да се управлява жизненият цикъл на дъщерните процеси.