文档章节

进程创建

o
 osc_1ee7cxmx
发布于 2018/08/06 19:23
字数 452
阅读 0
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

fork()

#include <unistd.h>

       pid_t fork(void);

a)用来创建一个新的进程,调用成功后,将存在两个进程,每个进程都从fork()的返回处继续执行。两个进程执行相同的程序文本段,但各自拥有不同的栈段、数据段和堆段,因为子进程对其父进程的堆段、栈段以及数据段进行了拷贝。

 

b)fork() 调用成功后,父进程中返回 子进程的 PID,在子进程中返回 0 。如果调用失败,在父进程中返回 -1,不创建进程。

 

c)fork() 调用成功创建子进程后,究竟是父进程先于子进程执行,还是子进程先于父进程执行,这取决于内核的调度。编程时应注意。

 示例

#include <stdio.h>
#include <unistd.h>

static int data = 111;

int main()
{
    int istack = 222;
    pid_t pid;
    switch(pid = fork())
    {
    case -1:
        perror("creat process failure!");
        return -1;
    case 0://child process 
        data *= 3;
        istack *= 3;
        break;
    default://parent process,do nothing but sleep 3 seconds
        sleep(3);
        break;
    }

    /*both child and parent come here*/
    printf("(%s)my pid is %d data is %d istack is %d\n", 
           (pid == 0) ? "child" : "parent", getpid(), data, istack);
    return 0;
}

运行结果

(child)my pid is 119011 data is 333 istack is 666
(parent)my pid is 119010 data is 111 istack is 222

父进程睡眠 3 秒,保证子进程先执行。数据结果可以看出,子进程拥有自己的栈和对父进程数据段的拷贝。

PS:

子进程ID(pid)返回给父进程的理由是:因为一个进程的子进程可以多个,并且没有一个函数使一个进程可以获得其所有子进程的进程ID。fork() 使子进程返回 0 的理由是:一个进程只会有一个父进程,所以子进程总是可以通过 getppid() 以获得其父进程的进程ID。

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Smartbi数据分析工具处理大数据性能如何?

为什么需要跨库整合能力 Smartbi支持多种数据源轻松接入,基本涵盖了市面上所有主流的数据库。无可否认多元的数据连接能力使Smartbi能快速连接现有数据源,构建统一的数据分析平台。但在项目...

osc_w0uxg75l
28分钟前
0
0
深入Vue 底层原理以及运行机制

Vue,React 这样的框架可以说是现在前端的必备技能,一个刚入门两三个月的前端都是要会Vue的,而且随着Vue3.0发布日程的推进,使用的人群变得多了,开始想去了解它。 Vue这么受大众接受,那么...

五月君
今天
13
0
好用的Excel大数据分析工具

为什么需要Excel分析 自助BI使得BI不再是高管领导的专利,促成了BI的平民化,更是BI的发展趋势。但自助BI工具的选择却并不简单,很多厂商推出了自己的自助分析工具,但在企业的使用过程中,实...

osc_vuza8uho
28分钟前
6
0
企业玩转DevOps转型:由弱到强,只需7步

【摘要】 在参考业界方法并总结客户成功故事的基础上,本文提出了“七步法”路线图,希望能帮助更多的企业顺利进行DevOps转型。 从2009年诞生,DevOps已经悄然走过了10多个年头。Gartner在技...

华为云开发者社区
29分钟前
0
0
浙江日报丨AI赋能,如何抢占“智”高点

  今天在杭州市余杭区秒优服饰智能工厂,机器人将订单所需的面料辅料精准送到各个吊挂生产线,每台机器、每个工人的具体任务、实时进度等都化为大数据,显示在工厂的大屏幕上。作为一家今年...

osc_wfvuuuju
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部