Junior — Middle
Ar galite paaiškinti, ką reiškia SIGCHLD signalas operacinėje sistemoje?
sobes.tech AI
Atsakymas iš AI
Unix/Linux operacinėse sistemose SIGCHLD signalas siunčiamas tėvų procesui, kai vienas iš jo vaikų procesų baigia darbą arba keičia būseną (pavyzdžiui, sustabdomas arba atnaujinamas).
Tėvas gali apdoroti šį signalą, kad sužinotų, kada vaikų procesas baigėsi, ir atlaisvintų su juo susijusius išteklius (pavyzdžiui, iškviesdamas wait() arba waitpid()), taip išvengdamas zombių procesų atsiradimo.
C kalbos SIGCHLD apdorojimo pavyzdys:
#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("Vaiko procesas baigėsi\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// vaiko procesas
_exit(0);
}
// tėvo procesas
pause(); // laukti signalų
return 0;
}
Šiuo būdu SIGCHLD padeda efektyviai valdyti vaikų procesų gyvavimo ciklą.