Я хотел бы иметь общую память между процессами для хранения PID.Глобальный массив для хранения PID. Fork(), Unix procesess, программирование на C
Я создал глобальный массив типа pid_t и использовал fork, созданный новый процесс, в котором я изменил значение элемента массива.
Почему массив в родительском процессе не изменяется, если массив указывает на то же самое?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
pid_t p[1];
int main()
{
pid_t f;
f = fork();
if(f == 0)
{
p[0] = getpid();
printf("Child ... p[0] PID = %d\n", (int)p[0]);
printf("points at %ld\n", (long int)p);
}
else if (f > 0)
{
sleep(1);
printf("Parent... p[0] PID = %d\n", (int)p[0]);
printf("points at %ld\n", (long int)p);
}
else
{
printf("Fork() error \n");
exit(1);
}
}
Общие соображения по использованию 'fork()' 1), ребенок должен быть завершен вызовом 'exit()' 2) родительский элемент перед вызовом должен вызывать 'wait()' или 'waitpid()' so ребенок выходит первым, иначе ребенок становится процессом «зомби», который может быть очень трудно устранить без перезагрузки компьютера. 3) если вы хотите использовать общую память, ознакомьтесь с 'shmat()' 'shmget()' 'shmctl()' 'shmdt()' 'ftok()', поскольку это функции, необходимые для общей памяти – user3629249