Ich versuche zu verstehen, wie fork()/Linux Kernel mit globalen Variablen befasst.Forking, Signale und wie sie mit globalen Variablen interagieren C
Gegeben Code:
#include<signal.h>
#include<unistd.h>
#include<stdio.h>
#include<errno.h>
#include <sys/types.h>
pid_t pid;
int counter = 2;
void handler1(int sig)
{
counter = counter - 1;
printf("%d", counter);
exit(0);
}
int main()
{
signal(SIGUSR1, handler1); //Install Handler
printf("%d", counter); //Print Parent global variable
pid = fork(); //Fork(), child pid = 0, parent's pid = positive int.
if (pid == 0) //Parent skips this, child goes into infinite loop
{
while(1) {}; // simulate doing some work
}
kill(pid, SIGUSR1); //While child is the loop, parents calls to terminate the child.
//Child will stop the infinite loop, and will not proceed any
//Will it call handler1 ???
wait(NULL); //Wait for child to be ripped
//Will it call handler1 second time ???
counter = counter + 1; //This will surely increment global variable
printf("%d", counter);
exit(0);
}
Der Ausgang ist 2123
Wie Unix/Linux-Kernel mit globalen Variablen nach fork() und Signal-Handler genannt werden ??? Werden sie zwischen dem Kind & Eltern geteilt?
Ein weiteres Problem, das ich mit diesem Code habe, ist, wie kill() & wait() wird mit globalen Variablen umgehen und welche Menge werden sie verwenden - Eltern oder Kinder? Und werden sie Signalhandler anrufen?
Danke!
Wer ist der perverse Lehrer, der das Semester mit 'fork' beendet hat? –
einfach den Code in Google-Suche stecken, wird es in den alten Prüfungen sofort – newprint