我遇到了一个看起来像这样的代码
int main(void){
pid_t pid;
char sharedVariable='P';
char *ptrSharedVariable=&sharedVariable;
pid = fork()
if(pid==0) {
sharedVariable = 'C';
print("Child Process\n");
printf("Address is %p\n", ptrSharedVariable);
printf("char value is %c\n", sharedVariable);
sleep(5);
} else {
sleep(5);
print("Parent Process\n");
printf("Address is %p\n", ptrSharedVariable);
printf("char value is %c\n", sharedVariable);
}
根据我对堆栈溢出的了解,我可以看出父进程和子进程的 char 值会有所不同。孩子的价值是'C',父母的价值是'P'。我也可以告诉父母和孩子的地址应该是相同的,即'sharedVariable'(&sharedVariable)的地址。
但是,这是我的问题。
- 将不同的 char 值分配给不同的进程有什么意义?因为一方面,既然我们已经可以通过 pid==0 或 >0 来识别每个进程,那么这一步不是冗余吗?另一个原因是我认为区分两个执行相同工作的进程没有意义,如果不让程序员将它们区分开来,它们就不能工作吗?
- 为什么让父母和孩子的地址保持不变?我可以建议,因为假设他们继续执行类似的任务,这样做会很方便,因为这样我们就可以复制和粘贴代码。我很犹豫,想确认一下。
- 如果我用 vfork() 替换了 fork(),那么父级 char 值的结果会是“C”吗?
提前一百万谢谢。