Junior — Middle
Meg tudná magyarázni, mit jelent a SIGCHLD jelzés az operációs rendszerben?
sobes.tech MI
Válasz az MI-től
A SIGCHLD jelzés Unix/Linux operációs rendszerekben akkor kerül küldésre a szülő folyamatnak, amikor egyik gyermekfolyamat befejezi a működését vagy állapotot változtat (például megáll vagy újraindul).
A szülő kezelheti ezt a jelet, hogy megtudja, mikor fejeződött be egy gyermekfolyamat, és felszabadíthatja a vele kapcsolatos erőforrásokat (például wait() vagy waitpid() hívásával), elkerülve a zombi folyamatok kialakulását.
Példa a SIGCHLD kezelésére C nyelven:
#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("Gyermekfolyamat befejeződött\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// gyermekfolyamat
_exit(0);
}
// szülőfolyamat
pause(); // jelek várása
return 0;
}
Így a SIGCHLD hatékonyan segít a gyermekfolyamatok életciklusának kezelésében.