(5)fork()

原创 2007年09月22日 18:22:00
一周没更新了吧。前几天ACM省赛,郁闷惨了。我怎么会遇到这种恶心事。昨天开始把我的虚拟机换成真正的操作系统了。那个累阿。。。。 
闲话不说,继续PROGRAMMING~~ 
我觉得题目这个函数很有必要多说一点。这个是我目前知道唯一linux下派生新线程的东东。一定要熟练运用。不然以后你写的服务器只能服务一个人鸟。嘻嘻。 
打个比方,fork函数的意思是。我是个领导(服务器主进程)。我在办公室。你(客户)来找我有事(accept连接上了),我分派(fork)给小弟(子线程)干。我还在办公室。你们两个干的什么我不知道了。 
只说理论不容易懂fork。 
看个程序先。 
  main()   
  {   
      pid_t   pid;   
      if((pid=fork())<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(pid==0)   
            printf("a/n");   
            else   
            printf("b/n");   
      }   
  }   
    结果是返回a,b或者b,a   
  因为fork调用将执行两次返回分别从子进程和父进程返回   
  由于父进程和子进程无关,父进程与子进程都可能先返回   
上边那两句是摘网上的。但是我认为写的不太全面。应该是子进程被先返回的几率大。 
这个程序的执行就是从fork调用开始开出了一个子进程。后边的判断语句是如果当前运行的是子进程。输出b。否则输出a。懂了没?懂了再来看个程序 
main()   
  {   
      pid_t   a_pid,b_fork;   
      if((a_pid=fork())<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(a_pid==0)   
            printf("b/n");   
            else   
            printf("a/n");   
      }   
   
      if(b_pid=fork()<0)   
      {   
          printf("error!");   
      }   
      else  main()   
  {   
      pid_t   a_pid,b_fork;   
      if(a_pid=fork()<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(a_pid==0)   
            printf("b/n");   
            else   
            printf("a/n");   
      }   
   
      if(b_pid=fork()<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(b_pid==0)   
            printf("c/n");   
            else   
            printf("a/n");   
      }   
  }  
这两个程序都是从网上摘的,不要学他的编程风格哦,丑死了。我看csdn和chinaunix上有说返回4个字母的,有说返回6个的。。。。N篇争论。晕了。我的跑出来是6个,其实本来就应该是6个。。。。。。WHY? 
留作思考。电脑快没电了。。。。。。明天中午贴这篇。知道的跟帖回复好。明天晚上再写吧。睡觉去了。HOHO 

[笔记][Java7并发编程实战手册]5.Fork\Join(Java1.7新特性)框架

Fork/Join框架本掌包含: 1. 创建Fork/Join线程池 2. 合并任务的结果 3. 异步运行任务 4. 在任务中抛出异常 5. 取消任务5.1简介  一般在开发简单的并发程序时...

Operating Systems: Three Easy Pieces(操作系统:三个简单方面)5穿插章节:进程API/5.1系统调用:fork()

5穿插章节:进程API 前言:该穿插章节将更多的介绍有关系统的实际运用,特别针对于操作系统API,以及如何运用它们。如果你不喜欢实践的东西,你可以跳过这个章节。但是,你最好应该关注一下实践,因为在实...

【APUE】5、fork函数

/** * 功能:fork函数创建子进程 * 时间:2015年12月9日15:30:55 * 作者:cutter_point */ #include "../util/apue.h" #inc...

5. 使用fork并发处理多个客户端的连接程序

网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新的客户端连接就fork出一个子进程专门服务这个客户端。但是子进程退出时会产生僵尸进程,父进程要注意处理SIG...

FORK()函数的理解

  • 2013年05月14日 00:33
  • 113KB
  • 下载

linux网络编程之socket(四):使用fork并发处理多个client的请求和对等通信p2p

一、在前面讲过的回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。网络服务...

Java并发Fork and join

  • 2014年09月01日 14:49
  • 419KB
  • 下载

理解fork()的一次调用两次执行

原文地址:http://blog.csdn.net/songxueyu/article/details/9115393 fork()函数是linux里多进程编程的基础,为linux成为强大的多用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(5)fork()
举报原因:
原因补充:

(最多只允许输入30个字)