Junior — Middle
Можете ли објаснити шта значи сигнал SIGCHLD у оперативном систему?
sobes.tech АИ
Одговор од АИ
Sistemima Unix/Linux, signal SIGCHLD se šalje roditeljskom procesu kada jedan od njegovih procesa potomaka završi ili promeni stanje (na primer, zaustavi se ili nastavi).
Roditelj može obraditi ovaj signal da bi saznao kada je proces potomak završio i oslobodio povezane resurse (na primer, pozivanjem wait() ili waitpid()), čime se sprečava pojavljivanje zombija procesa.
Primer obrade SIGCHLD u 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("Proces potomak je završio\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// proces potomak
_exit(0);
}
// roditeljski proces
pause(); // čekanje na signale
return 0;
}
Na ovaj način, SIGCHLD pomaže efikasno upravljanje životnim ciklusom procesa potomaka.