Sobes.tech
Junior — Middle

Əməliyyat sistemində SIGCHLD siqnalının nə demək olduğunu izah edə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Unix/Linux əməliyyat sistemlərində SIGCHLD siqnalı, valideyn prosesə onun övlad proseslərindən biri bitdiyində və ya vəziyyətini dəyişdiyində (məsələn, dayandırıldıqda və ya yenidən başlatıldıqda) göndərilir.

Valideyn bu siqnalı işləyə bilər ki, övlad prosesinin tamamlandığını bilsin və ona bağlı resursları azad etsin (məsələn, wait() və ya waitpid() çağıraraq), beləliklə, zombi proseslərin yaranmasının qarşısını alsın.

C dilində SIGCHLD siqnalının işlənməsi nümunəsi:

#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("Uşaq prosesi tamamlandı\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // uşaq prosesi
        _exit(0);
    }
    // valideyn prosesi
    pause(); // siqnalları gözləyir
    return 0;
}

Bu şəkildə, SIGCHLD uşaq proseslərinin həyat dövrünü səmərəli idarə etməyə kömək edir.