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

关于fork()的学习

时间:2018-07-31 13:27:09      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:type   cpp   结果   iostream   创建   建立   turn   上下   space   

返回类型

  pit_t是Linux下的进程号类型,也就是Process ID _ Type 的缩写。 在宏定义中是unsigned int类型。

fork()的返回值

  负数:如果出错,则fork()返回-1,此时没有创建新的进程。最初的进程仍然运行。

    零  :在子进程中,fork()返回0。

  正数:在父进程中,fork()返回正的子进程的PID。

相关测试

#include<stdio.h>
#include<iostream>
using namespace std;
#include <unistd.h>;
#include <sys/types.h>;
main ()
{
    pid_t pid;
    pid=fork();
    if (pid < 0) printf("error in fork!");
    else if (pid == 0){
        printf("I am the child process, my process id is %d\n",getpid());
    }
    else{
        printf("I am the parent process, my process id is %d\n",getpid());
        exit(0);    //父进程退出
    }
    printf("子进程仍然在运行中......");
}

 测试结果

  am the parent process, my process id is 26575
  I am the child process, my process id is 26583
  子进程仍然在运行中......
  按 <RETURN> 来关闭窗口...

 测试说明

  操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!父进程继续执行,操作系统对fork的实现,使这个调用在父进程中返回刚刚创建的子进程的pid(一个正整数),子进程在之后的某个时候得到调度,它的上下文被换入,占据 CPU,操作系统对fork的实现,使得子进程中fork调用返回0。所以在这个进程(注意这不是父进程了哦,虽然是同一个程序,但是这是同一个程序的另外一次执行,在操作系统中这次执行是由另外一个进程表示的,从执行的角度说和父进程相互独立)中pid=0。

  为什么看上去程序中互斥的两个分支都被执行了?在一个程序的一次执行中,这当然是不可能的;但是你看到的两行输出是来自两个进程,这两个进程来自同一个程序两次执行的结果。

关于fork()的学习

标签:type   cpp   结果   iostream   创建   建立   turn   上下   space   

原文地址:https://www.cnblogs.com/helloworldcode/p/9395098.html

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