linux中fork()函数详解 (阅读笔记)

linux中fork()函数详解(转载)

一、fork入门知识
  • 在Linux中fork函数是非常重要的函数,它的作用是从已经存在的进程中创建一个子进程,而原进程称为父进程。
  • 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。
  • 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
#include   
#include    
int main ()   
{   
    pid_t fpid; //fpid表示fork函数返回的值  
    int count=0;
    printf("当前进程id:  %d\n", getpid());
    fpid=fork();

    if (fpid < 0) {
        printf("error in fork!");
    } else if (fpid == 0) {
        printf("我是子进程 , 我的进程id: %d , 我的子进程id: %d\n", getpid(), fpid);
        count++;
    } else {
        printf("我是父进程 , 我的进程id: %d , 我的子进程id: %d\n", getpid(), fpid);
        count++;
    }

    printf("统计结果是: %d\n",count);
    return 0;  
}  
运行

结果:
当前进程id:  16948
我是父进程 , 我的进程id: 16948 , 我的子进程id: 16949
统计结果是: 1
我是子进程 , 我的进程id: 16949 , 我的子进程id: 0
统计结果是: 1
fork 被调用一次,能够返回两次,它有三种不同的返回值:
  • 在父进程中,fork返回新创建子进程的进程ID;
  • 在子进程中,fork返回0;
  • 如果出现错误,fork返回一个负值;
fokr调用失败的原因
  • 当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN
  • 系统内存不足,这时errno的值被设置为ENOMEM。
fork执行完毕后,出现两个进程,fork只拷贝下一个要执行的代码到新的进程,用户态拷贝。
     父进程(第一次fock)
         /  \
父进程(相同)  子进程(相同)
      .....

你可能感兴趣的:(linux中fork()函数详解 (阅读笔记))