Junior — Middle
Môžete vysvetliť, čo znamená signál SIGCHLD v operačnom systéme?
sobes.tech AI
Odpoveď od AI
Signál SIGCHLD v unixových/linuxových operačných systémoch sa odosiela rodičovskému procesu, keď jeden z jeho detských procesov ukončí svoju činnosť alebo zmení stav (napríklad, sa zastaví alebo obnoví).
Rodič môže tento signál spracovať, aby zistil, kedy detský proces skončil, a uvoľnil s ním spojené zdroje (napríklad volaním wait() alebo waitpid()), čím sa zabráni vzniku zombie procesov.
Príklad spracovania SIGCHLD v jazyku 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("Detský proces ukončený\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// detský proces
_exit(0);
}
// rodičovský proces
pause(); // čakanie na signály
return 0;
}
Týmto spôsobom SIGCHLD pomáha efektívne riadiť životný cyklus detských procesov.