在一个进程中有一个名为“users”的var,并且进程分叉了一些子进程,我想知道这些子进程如何访问“users”变量?
顺便说一句:
该变量将在运行时由父进程修改
答案 0 :(得分:3)
您想使用共享内存。您需要to open个文件,使用this来设置长度(可能是sizeof(* var)),mmap。在叉前做这个。完成unmap it,close the file和unlink共享文件后。
void *mem;
int shm_fd;
shm_fd = shm_open("file", O_CREAT | O_RDWR, 0644);
ftruncate(shm_fd, sizeof(int));
mem = mmap(0, sizeof(int), PROT_WRITE | PROT_READ, MAP_SHARED, shm_fd, 0);
/* fork it, use it */
munmap(mem, sizeof(int));
close(shm_fd);
shm_unlink("file");
答案 1 :(得分:0)
Linux使用称为copy-on-write的机制。这基本上意味着,只要变量未被修改,父进程和新进程共享一个变量。但在修改变量之前,它会被复制,新进程会使用副本。这是出于性能原因而完成的,技术称为延迟优化。您可以将变量设置为静态,然后直接访问它。
答案 2 :(得分:0)
在C中分叉将创建一个子进程,其中包含父变量的所有副本。 如果你只是想要那个变量,那么你可以使用fork创建的那个副本。 如果你想共享那个变量,你可以去实现IPC机制。 你可以看到一个适合使用IPC机制的指南here