3.Linux中fork()函数

来源:互联网 发布:网络规划设计师真题 编辑:程序博客网 时间:2024/06/06 02:33
     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程),这两个进程共享代码空间,但数据空间是独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,但只有一点不同,fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,如果fork成功,子进程中fork的返回值是0,父进程中fork的返回值是子进程的进程号,如果fork不成功,父进程会返回错误。也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。

    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

下面代码的输出结果是()
1
2
3
4
5
6
7
8
9
10
11
12
intmain(){
   intpid;
   intnum=1;
   pid=fork();
   if(pid>0){
   num++;
   printf("in parent:num:%d addr:%x\n",num,&num);
   }
   elseif(pid==0){
   printf("in child:num:%d addr:%x\n",num,&num);
   }
}

正确答案: B   你的答案: B (正确)

父子进程中输出的num相同,num地址不相同
父子进程中输出的num不同,num地址相同
父子进程中输出的num相同,num地址也相同
父子进程中输出的num不同,num地址不相同


0 0
原创粉丝点击