Junior — Middle
Czy możesz wyjaśnić, co oznacza sygnał SIGCHLD w systemie operacyjnym?
sobes.tech AI
Odpowiedź od AI
Sygnał SIGCHLD w systemach operacyjnych Unix/Linux jest wysyłany do procesu rodzica, gdy jeden z jego procesów potomnych kończy działanie lub zmienia stan (np. zostaje zatrzymany lub wznowiony).
Proces rodzica może obsłużyć ten sygnał, aby dowiedzieć się, kiedy proces potomny zakończył działanie i zwolnić związane z nim zasoby (np. wywołując wait() lub waitpid()), zapobiegając powstawaniu procesów zombie.
Przykład obsługi SIGCHLD w języku 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 potomny zakończył działanie\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// proces potomny
_exit(0);
}
// proces rodzica
pause(); // oczekiwanie na sygnały
return 0;
}
W ten sposób SIGCHLD pomaga efektywnie zarządzać cyklem życia procesów potomnych.