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 βοηθά στη διαχείριση του κύκλου ζωής των θυγατρικών διαδικασιών αποτελεσματικά.