初识linux中的fork()

函数说明:一个现有的线程调用fork()函数,会创建一个子进程(child process)。子进程是父进程的副本,会获得父进程数据空间、堆、栈等资源的副本,但是父子进程不共享这些存储空间。由于在复制时复制了父进程堆栈段,所以两个进程都停留在fork函数中,等待返回。因此fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

返回值:(1)父进程返回新创建子进程的进程ID;

      (2)子进程返回0;

      (3)如果出现错误,fork返回一个负值;

  1. #include <unistd.h>  
  2. #include <stdio.h>   
  3. int main ()   
  4. {   
  5.     pid_t fpid; //fpid表示fork函数返回的值  
  6.     int count=0;  
  7.     fpid=fork();   
  8.     if (fpid < 0)   
  9.         printf("error in fork!");   
  10.     else if (fpid == 0)
  11.     {  
  12.         printf("i am the child process, my process id is %d/n ",getpid());   
  13.         printf("子进程/n"); 
  14.         count++;  
  15.     }  
  16.     else 
  17.     {  
  18.         printf("i am the parent process, my process id is %d/n",getpid());   
  19.         printf("父进程/n");  
  20.         count++;  
  21.     }  
  22.     printf("统计结果是: %d/n",count);  
  23.     return 0;  
  24. }  

     运行结果是:
    i am the child process, my process id is 5574
     子进程
    统计结果是: 1
    i am the parent process, my process id is 5573
     父进程
    统计结果是: 1


一位网友解释fpid的值为什么在父子进程中不同。“其实就相当于链表,进程形成了链表,父进程的fpid(p意味point)指向子进程的进程id

每个进程都有一个唯一的进程标识符(process ID),可以通过getpid()函数获得,还有一个记录父进程pid的变量,可以通过getppid()函数获得变量的值。
  fork执行完毕后,出现两个进程



猜你喜欢

转载自blog.csdn.net/hefenglian/article/details/78007054