Junior — Middle
Можете ли да обясните какво означава сигналът SIGCHLD в операционната система?
sobes.tech AI
Отговор от AI
Сигналът SIGCHLD в операционните системи Unix/Linux се изпраща на родителския процес, когато един от неговите дъщерни процеси приключи или промени състоянието си (например, спира или се възобновява).
Родителят може да обработи този сигнал, за да узнае кога е приключил дъщерният процес и да освободи свързаните с него ресурси (например, като извика wait() или waitpid()), като по този начин предотвратява появата на зомби процеси.
Пример за обработка на SIGCHLD на 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("Дъщерен процес приключи\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// дъщерен процес
_exit(0);
}
// родителски процес
pause(); // изчакване на сигнали
return 0;
}
По този начин SIGCHLD помага ефективно да се управлява жизненият цикъл на дъщерните процеси.