码迷,mamicode.com
首页 > 其他好文 > 详细

嵌入式工程师考试总结 fork()函数

时间:2015-08-18 01:22:22      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:嵌入式   工程师   unix   

假设在UNIX操作系统环境下执行以下程序:
main()
{
   printf("Hello World\n");
   fork();
   printf("Hello World\n");
}

若程序正常运行,子进程创建成功,那么,屏幕上得到输出的有
A)  1个Hello World
B)  2个Hello World
C)  3个Hello World
D)  4个Hello World

一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
UNIX将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。
 在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
所以有3个Hello world。技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

嵌入式工程师考试总结 fork()函数

标签:嵌入式   工程师   unix   

原文地址:http://blog.csdn.net/u011046042/article/details/47734935

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!