`
kenby
  • 浏览: 725866 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fork的执行

 
阅读更多

先看看一段fork的程序

 

int main()

{

     pid_t pid;

 

     语句 a;      

     pid = fork();

     语句 b;

}

 

1.当程序运行到 pid = fork()时,这个进程马上分裂(fork的中文意思)成两个进程,我们称为父进程和子进程,子进程是父进程的副本,副本的意思是子进程把父进程的数据空间,堆和栈都复制一遍给自己用,这要求在内存给子进程分配和父进程同样大的存储空间,这样,父,子进程拥有相同的数据,但不会共享存储空间,他们只是共享正文段。


2.apue2这样说fork的执行:fork函数被调用一次,但返回两次,两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是子进程的进程ID。一直很难理解调用一次,返回两次这句话,我想这样理解可能更好:fork函数被调用一次,但执行两次,父进程执行一次返回子进程的进程ID,子进程执行一次返回0.


3.fork完后,子进程和父进程继续执行fork调用之后的语句,是先执行父进程还是先执行子进程呢?apue2给出了答案:一般来说,在fork之后是父进程先执行还是子进程先执行是不确定的。这取决于所使用的调度算法。

分享到:
评论

相关推荐

    fork函数例程执行过程分析及说明

    在本文档中,我们将深入探讨`fork()`的工作原理,以及如何通过示例代码理解其执行过程。 首先,让我们来了解一下`fork()`函数的基本概念。`fork()`会创建一个与调用进程几乎完全相同的子进程,称为“克隆”进程。新...

    fork后子进程从哪里开始执行

    ### fork后子进程从哪里开始执行 #### 一、什么是fork? `fork()` 是 Linux 和其他类 Unix 操作系统中的一个重要系统调用,用于创建一个与当前进程几乎完全一样的新进程,即子进程。子进程继承了父进程的大部分...

    Linux 中fork的执行的实例详解

    `fork()`函数就是其中之一,它允许一个进程创建一个新的子进程,从而实现并发执行任务的能力。 #### 二、`fork()`函数介绍 `fork()`函数是Linux系统中最基础也是最重要的进程控制函数之一,它的作用是在当前进程的...

    fork()编程fork()编程fork()编程

    两者都会继续执行`fork()`之后的语句,但各自的执行上下文不同。 三、父子进程通信 由于`fork()`后的两个进程共享某些资源,如文件描述符,因此它们可以用来进行通信。例如,通过管道(pipe)、套接字(socket)或...

    linux 进程 线程 fork 的深入思考

    - 父进程继续执行 `fork` 后的代码,而子进程从 `fork` 函数处开始执行。 2. **关键点:** - 父进程执行了所有代码,子进程仅执行 `fork` 后的代码。 - 子进程继承的是父进程 `fork` 时的环境状态,而非初始...

    fork1() 编程fork1() 编程fork1() 编程fork1() 编程

    新进程(子进程)和旧进程(父进程)会从`fork()` 调用处继续执行,但它们各自拥有独立的执行路径。 **进程的生命周期与`fork()`** 1. **创建进程**: 当`fork()` 成功执行时,它返回两次:一次在父进程中返回新...

    fork3()编程fork3()编程fork3()编程fork3()编程fork3()编程

    然而,子进程和父进程在`fork()`之后具有独立的进程ID(PID)和系统资源,比如它们可以有不同的执行路径。 **fork()的工作原理:** 1. **复制进程上下文**:当`fork()`被调用时,操作系统为子进程分配新的内存空间...

    linux_fork函数

    `fork()`函数的特点在于它实际上只被调用一次,但在执行上却表现为两次返回:一次是在父进程中,另一次是在子进程中。具体返回值如下: 1. **父进程**:`fork()`返回新创建的子进程的进程ID。 2. **子进程**:`fork...

    Fork/Join例子

    4. **Fork和Join**:`fork()`方法用于将任务提交到`ForkJoinPool`,并允许当前工作线程去执行其他任务。`join()`方法则用于等待并获取`fork()`的子任务的结果。 5. **工作窃取算法**:`ForkJoinPool`采用了一种称为...

    fork的简单使用

    然而,一旦`fork()`成功,两个进程就可以独立执行,它们可以有自己的程序计数器(PC),执行不同的指令序列。 2. **进程生命周期**:子进程可以独立于父进程终止,也可以等待父进程结束。如果父进程先结束,子进程...

    在win系统下模拟linux中的fork()函数执行过程与基础通信过程

    在win系统下模拟linux中的fork()函数执行过程与基础通信过程 备注清晰。

    Fork 解读

    2.1 返回值:在成功执行Fork后,父进程和子进程都会继续执行fork之后的语句,但fork调用会返回不同的值。在父进程中,fork返回新创建子进程的PID;而在子进程中,fork返回0。这一特性使得父子进程可以区分彼此,从而...

    ForkJoin并发框架入门示例

    `ForkJoin入门.ppt`是PPT文件,里面详细介绍了并发与并行的概念以及ForkJoin框架的使用方法,包括如何创建和执行ForkJoin任务。`FileSize.java`可能包含了一个实际的ForkJoinTask示例,用于计算文件大小或其他类似的...

    java Fork Join框架及使用

    Fork/Join框架是Java7引入的一种用于并行任务执行的框架,它允许将复杂任务拆分成多个子任务,并行执行,然后通过join操作将结果聚合。Fork/Join框架特别适合处理可以递归拆分的计算密集型任务,比如大数据集的搜索...

    创建新进程:fork函数:fork函数干什么? fork函数与vfork函数的区别在哪里?为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?

    fork 函数与 vfork 函数的区别在于:vfork 函数创建的子进程会在父进程的地址空间中执行,而不是在自己的地址空间中执行。这意味着,vfork 函数创建的子进程不能修改父进程的地址空间。 在使用 fork 函数时,为什么...

    fork()系统调用参数返回值详解

    在解释这个问题之前,我们需要了解一个概念:在语句pid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同,将要执行的下一条语句都是if (pid>0)...

    fork 函数详解

    fork 函数的执行过程可以分为两个阶段:第一阶段是创建新的进程,系统给新的进程分配资源,例如存储数据和代码的空间。第二阶段是把原来的进程的所有值都复制到新的进程中,只有少数值与原来的进程的值不同。 fork ...

    演示fork函数的效果

    例如,在`fork1.c`、`fork2.c`和`signal.c`这些源代码文件中,可能包含这样的逻辑来检查`fork()`的返回值,以便执行不同的操作。 `fork()`的主要工作包括: 1. **内存复制**:父进程的内存映像被复制到子进程中,...

    linux c fork全面剖析

    这段输出表明了 `fork()` 成功创建了一个子进程,并且两个进程都在执行 `printf` 语句,分别打印了各自的进程 ID。 #### 总结 通过以上分析,我们可以得出以下结论: - `fork()` 函数能够有效地创建一个与父进程...

    fork创建多个子进程

    fork 创建多个子进程是指通过 fork 系统调用创建多个子进程,每个子进程可以执行不同的任务。下面我们将讨论三种常见的 fork 创建多个子进程的方法。 第一种方法:同时创建多个子进程 该方法通过在主进程中使用 ...

Global site tag (gtag.js) - Google Analytics