Junior — Middle
Můžete vysvětlit, co znamená signál SIGCHLD v operačním systému?
sobes.tech AI
Odpověď od AI
Signál SIGCHLD v unixových/linuxových operačních systémech je odesílán rodičovskému procesu, když jeden z jeho dětských procesů ukončí svou činnost nebo změní stav (například se zastaví nebo obnoví).
Rodič může tento signál zpracovat, aby se dozvěděl, kdy dětský proces skončil, a uvolnil s ním spojené zdroje (například voláním wait() nebo waitpid()), čímž zabrání vzniku zombie procesů.
Příklad zpracování SIGCHLD v jazyce 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("Dětský proces ukončen\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// dětský proces
_exit(0);
}
// rodičovský proces
pause(); // čekat na signály
return 0;
}
Tímto způsobem SIGCHLD pomáhá efektivně řídit životní cyklus dětských procesů.