MemoryGarden's Blog

努力 -----------大能猫

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 11 Stories :: 20 Comments :: 0 Trackbacks
fork 在现有进程下创建一个新的进程,现有进程为父进程,新创建的进程为子进程。子进程创建后,获得父进程的数据空间,堆栈的副本(子进程改变,父进程不改变)

父子进程的执行顺序是不确定的,取决于内核的调度算法,如果要求父子进程之间的相互同步,则要求某种形式的进程间通信(IPC)  下面代码在父进程中sleep了2秒,但是不保证子进程可以完全执行完毕。


进程执行的示意图




运行结果 :

1 process id:2954
2 IM CHILD parent id:2954, value = 1
3 IM FATHER child id:2955, value:0


 1 #include <unistd.h>
 2 #include <sys/types.h>
 3 #include <stdio.h>
 4 
 5 int main(){
 6   int value = 0;
 7   printf("process id:%d\n", getpid());
 8   int pid = fork();
 9   if(pid < 0){
10     puts("ERROR ");
11   }
12   else if(!pid){ //child
13     ++value;
14     printf("IM CHILD parent id:%d, value = %d\n", getppid(), value);
15   }else//parent
16     sleep(2);
17     printf("IM FATHER child id:%d, value:%d\n", pid, value);
18   }
19   return 0;
20 }
21 
posted on 2011-06-05 16:14 memorygarden 阅读(265) 评论(0)  编辑 收藏 引用 所属分类: 网络编程

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理