Linux系统中C语言编程创建函数fork()执行解析

2016-02-19 10:33 6 1 收藏

今天图老师小编要向大家分享个Linux系统中C语言编程创建函数fork()执行解析教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下:

1.函数本身

  (1)头文件

  #includeunistd.h
  #includesys/types.h

  (2)函数原型

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  pid_t fork( void);
  (pid_t 是一个宏定义,其实质是int 被定义在#includesys/types.h中)
  返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

  (3)函数说明

  一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,子进程有了独立的地址空间

2.代码执行解释

  (1)代码如下图所示

  (2)分析

  由操作系统相关知识可知,进程是系统资源分配的基本单位,因此子进程与父进程不共享进程资源空间。在执行代码段第8行之前,系统中只有默认的主进程。在执行完代码段第8行后,系统中就有了两个进程,即主进程和由其创建的子进程。

  创建子进程,fork()函数返回两个数值,若创建成功,子进程中返回0;父进程返回子进程ID。用资源空间图示如下:

执行了fork()函数后,主进程为父进程生成了一份资源空间的副本。主进程中的pid为子进程的pid(pid0),子进程中的pid为0。

  在fork()函数之后父进程与子进程都从下一行执行,即第9行。因为主进程中pid0,可以执行else if(pid0)段代码,子进程pid=0,可以执行else if(pid==0)段代码。

  (3)代码执行结果如下:

  可见,"Before the fork ..."只执行了一次。"After the fork ..."执行了两次。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  (具体的执行结果,可能会由于进程调度的不同,后面的四个输出顺序可能不同。不过第一个输出的一定是"Before the fork ...")。

来源:http://www.tulaoshi.com/n/20160219/1595037.html

延伸阅读
[ 发表日期:2002-1-4 9:28:46 ] 函数名: abort 功 能: 异常终止一个进程 用 法: void abort(void); 程序例: #include stdio.h #include stdlib.h int main(void) { printf("Calling abort()"); abort(); return 0; /* This is never reached */ } 函数名: abs 功 能: ...
标签: 服务器
linux环境编程-ftok()函数详解   系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。 ftok原型如下: key_t ftok( char * fname, int id ) fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号, 虽然为int,但是只有8个比特被使用(0-255)。 当...
标签: 服务器
Linux系统中重复执行命令的方法小结   普通的重复执行命令 实际操操作过程中,经常会遇到重复执行同一命令,以观察其结果变化的情况,以前经常是上下键加回车,或是Ctr+p然后回车的方式。 现在告诉大家一个好用的命令watch,它可以全屏执行这个命令,并显示执行结果。例如: 代码如下: #watch uptime #watch...
实现多语言的方法是通过配置文件实现,通过从配置文件中读取资源,然后在显示窗口的时候,即Load()方法中,动态显示相应的选择语言。 下面是在C#的Windows编程中实现多语言的步骤: 第一步:设置默认语言和修改默认语言 我们定义了一个XML文件来存放默认语言,文件名为LanguageDefine.xml。 LanguageDefine.xml <?x...
汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能。例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功能;一个提供汉字显示功能的空调的LCD上不需要显示一条"短消息",诸如此类。但是一部手机、小灵通则通常需要包括较完整的汉字库。 ...

经验教程

357

收藏

43
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部