北大青鸟
3/6 上一条 下一条
当前位置:主页>LINUX>linux多进程的总结(fork用法)

linux多进程的总结(fork用法)

来源:北大青鸟郑州志远 作者:北大青鸟管理员 发布时间:2008-05-29

简单理解为,一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态。操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单 CPU的情况而言,每一特定时刻只有一个进程占用 CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。

 fork()用于从已存进程中建立一个新进程,新进程为子进程,老进程为父进程.可以通过检查"fork()"地返回值知道哪个是子进程哪个是父进程。父进程得到的返回值是子进程的进程号,而子进程则返回0。

基本模式是:

    #include
    #include
    #include
    #include
    #include
    #include
    main()
    {
    pid_t pid;
    int rv;
    pid=fork(); //创建进程
    switch(pid)
    {
    case -1: //返回-1的话,进程创建没成功
    perror("fork");
    exit(1);
    case 0:
    printf(" CHILD: This is the child process!\n");
    printf(" CHILD: My PID is %d\n", getpid()); //调用 getpid 得到自己的 PID
    printf(" CHILD: My parent's PID is %d\n", getppid()); //getppid() 得到父进程的 PID
    printf(" CHILD: Enter my exit status (make it small): ");
    scanf(" %d", &rv);
    printf(" CHILD: I'm outta here!\n");
    exit(rv);
    default:
    printf("PARENT: This is the parent process!\n");
    printf("PARENT: My PID is %d\n", getpid());
    printf("PARENT: My child's PID is %d\n", pid); //fork() 返回的default值意味着你正在父进程中,返回值是子进程的 PID 。这是得到子进程 PID 的唯一方法
    printf("PARENT: I'm now waiting for my child to exit()...\n");
    wait(&rv); //父进程必须等待子进程完成收拾子进程的残余后才能继续
    printf("PARENT: My child's exit status is: %d\n", WEXITSTATUS(rv)); 也就是父进程不能先于子进程消亡。
    printf("PARENT: I'm outta here!\n");
    }
    }
    //EXITSTATUS() 是一个宏,从 wait() 返回值中提取实际的返回值。
    // wait() 怎么知道在哪个进程上等待?我的意思是,由于父进程可以有多个子进程, wait() 实际等待地是哪一个?答案非常简单,它等待最先退出的那一个。你可以通过以子进程的 PID 为参数调用 waitpid() 指明是哪一个子进程。

    if (!fork())
    {
    printf("I'm the child!\n");
    exit(0);
    } else
    {
    printf("I'm the parent!\n");
    wait(NULL);
    }

    linux 是多用户和多进程的操作系统,进程在操作系统中的创建,都会生成一个进程描述块,描述当前进程的所有信息,包括,数据段、代码段、堆栈段的地址,当前进程的环境变量,文件描述符等。

    fork函数过程:操作系统先创建一个进程描述块,然后把父进程的所有进程描述符的信息精确拷贝过来,和父进程一样(除了进程ID不一样外),代码段共享,数据段和堆栈段复制,所有的寄存器的值全部精确拷贝,文件描述符也许精确拷贝。

    fork的返回值,fork在父进程空间中返回子进程的PID,在子进程空间中返回0。




上一篇:阻击网络黑客入侵 奥运网络安保小组在行动   下一篇:初次远程做Linux Iptables规则注意事项
如果你想咨询课程、学费、就业、开班等情况!请拨打我们的咨询热线0371-66252525 或者点击QQ右侧的图标与我们在线老师咨询!

热点新闻

开班信息

班级 类型 状态
YS113 周末班 热招
TS137 专修班 热招
YS112 周末班 热招
TS136 专修班 热招
YS111 周末班 余9座
TS135 专修班 余5座
TS134 专修班 余1座

免费讲座

时间:11月23日(本周日)14:00 内容:"黑客攻防"         "专家讲解职业规划" 抢座热线:0371-66252525 电话抢座    名额有限
北大青鸟就业案例
徐保金
学      历:大专
就职单位:金业集团
岗      位:网络工程师
    我是一名07年普通大专毕业的学生,毕业后心里很不踏实,对自己的前... >>详情

北大青鸟讲师
于江
毕业学校:天津大学
专      业:工学硕士
教学理念:晓之以理,动之以情,导之以行,持之以恒... >>详情

青鸟大事

人民日报、光明日报、中国青年报、中国计算机报等几十家媒体对公司进行了多方面的报道。
自成立以来,北大青鸟APTECH先后赢得了“中国IT公众认知企业金奖”、“本土最具知名度认证奖”、“最佳就业认同奖”、 “质量放心用户满意双优品牌”等数十个奖项;
2007年市场占有率达到38.6%(数据来源:IDC报告),成为中国IT职业培训领域不折不扣的领导品牌。
北大青鸟APTECH凭借自身的卓越表现,自2001年至2007年,已连续7年实现全国市场排名第一。
北大青鸟APTECH先进的教学方法、优质的教育产品和规范的经营管理模式已经得到了来自国际(ISO9001认证)、国内(劳动与社会保障部OSTA联合认证)的双重认可。
目前,公司已在全国20多个省份、自治区、直辖市的100余个重点城市发展了240余家授权培训中心,全体系教职员工10000余人,培养学员逾30万人,发展速度之快、经营规模之大、学员人数之多,在全国众多IT职业培训机构中一枝独秀。
所有中心实行统一经营管理、严格保证教学质量,受到社会和业界的高度认可。
公司采取特许经营的业务模式,在全国建立“北大青鸟APTECH计算机授权培训中心”。
在8年的发展历程中,公司依托北京大学雄厚的教育背景,在科学先进的管理经验、系统完美的教材编排、以人为本的课程设置的基础上,已发展成为中国现代信息技术教育领域的先锋。
公司服务于国内IT职业教育领域,致力于为中国IT产业培养技能型紧缺实用人才。
北京阿博泰克北大青鸟信息技术有限公司(简称“北大青鸟APTECH”) 成立于2000年1月,是北京大学青鸟集团与印度阿博泰克公司(APTECH)合资组建的专业IT职业教育公司。
  • 北大青鸟电话:0371-66252525
  • 教质服务热线:15890063901
  • 夜间咨询热线:13676985050
北大青鸟电子杂志