Я пытаюсь понять, как fork () / ядро Linux работает с глобальными переменными.
Данный код:
#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);
}
Выход 2123
Как ядро Unix / Linux работает с глобальными переменными после вызова fork () и обработки сигналов ??? Распределяются ли они между ребенком и родителем?
Другая проблема, с которой я сталкиваюсь в этом коде, заключается в том, как kill () и wait () будут работать с глобальными переменными и какой набор они будут использовать - родительский или дочерний ?? И они будут вызывать обработчик сигнала ???
Спасибо!