关于fork()返回值

Sat Jun 06 22:38:57 CST 2015 528 C/C++

文章摘要Linux系统中,系统调用fork()用于创建子进程。本文观察fork()这个函数的返回值。

fork()函数原型:pid_t fork(void);

pid_t结构定义在sys/types.h,所以程序需要#include <sys/types.h>


C代码:

#include <stdio.h>
#include <sys/types.h>

int main(int argc, char** argv){
  pid_t pid = fork();
  if(pid < 0){
    printf("error");
  } else if(pid > 0) {
    printf("father process:pid=%d,returned value=%d\n",getpid(),pid);
  } else {
    printf("child process:pid=%d,returned value=%d\n",getpid(),pid);
  }

  return 0;
}


编译运行后输出结果为:

father process:pid=5127,returned value=5128
child process:pid=5128,returned value=0


可见,在父进程中,fork返回的是子进程的pid(5128)。而在子进程中,fork返回的是0.

当fork无法创建子进程时,返回-1;一般导致无法创建子进程的原因有:1.当前进程数达到系统上限;2.内存不够

打赏
打赏

分享到: