Добрый вечер,
Я программирую и тестирую некоторые вещи о процессах в C с помощью системных вызовов fork () и waitpid ().Я понимаю поведение с глобальной переменной, но я не понимаю, почему, когда второй процесс завершен и обратно в первом процессе, переменная "i" имеет то же значение, что и второй процесс.
А такжепочему, когда программа возвращается к корневому процессу, переменная "i" имеет значение 2.
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int total = 0;
int main(int argc, char **argv) {
int i, pid;
for(i = 1; i < 3; ++i) {
pid = fork();
if(pid == 0) {
total = total + i;
printf("\n");
printf("Child process %d\n", getpid());
printf("Parent process %d\n", getppid());
printf("i = %d\n", i);
} else {
waitpid(pid, NULL, 0);
}
}
printf("Child process (end) %d\n", getpid());
printf("Parent process (end) %d\n", getppid());
printf("total = %d\n", total);
printf("i = %d\n", i);
exit(0);
}
А вот результат выполнения
Child process 9191
Parent process 9190
i = 1
Child process 9192
Parent process 9191
i = 2
Child process (end) 9192
Parent process (end) 9191
total = 3
i = 3
Child process (end) 9191
Parent process (end) 9190
total = 1
i = 3
Child process 9193
Parent process 9190
i = 2
Child process (end) 9193
Parent process (end) 9190
total = 2
i = 3
Child process (end) 9190
Parent process (end) 2876
total = 0
i = 3
У меня есть предложение: функция waitpid () передает ресурсы дочернему процессу, но не может объяснить значение переменной «i» в корневом процессе.
Я надеюсь, что я был в курсе своих проблем и прошу прощения за мой маленький плохой английский.
Спасибо за ваши ответы.