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 βοηθά στη διαχείριση του κύκλου ζωής των θυγατρικών διαδικασιών αποτελεσματικά.