Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ, რა ნიშნავს სიგნალი SIGCHLD ოპერაციული სისტემაში?

sobes.tech AI

პასუხი AI-სგან

Unix/Linux ოპერაციული სისტემებში SIGCHLD ნიშანი გადაეცემა მშობელ პროცესს, როდესაც მისი შვილი პროცესიდან ერთ-ერთი დასრულდება ან შეცვლის მდგომარეობას (მაგალითად, გაჩერდა ან განახლდა).

მშობელი შეიძლება ამ ნიშნის დამუშავება, რათა გაიგოს, როდის დასრულდა შვილი პროცესი და გაათავისუფლოს დაკავშირებული რესურსები (მაგალითად, გამოძახებით wait() ან waitpid()), თავიდან აიცილოს ზომბი პროცესების წარმოქმნა.

C ენაზე SIGCHLD-ის დამუშავების მაგალითი:

#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 ეხმარება ეფექტურად მართოს შვილთ PROCESS-ების ციკლი.