linux使用fork方式创建进程


代码

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("fork之前\n");
    pid_t fpid;
    fpid = fork();
    printf("fork之后\n");
    if (fpid < 0)
    {
        printf("error during fork");
    }
    else if (fpid == 0)
    {
        printf("current process is child process : pid = %d,parent pid = %d\n", getpid(), getppid());
    }
    else
    {
        printf("current process is parent process : pid = %d,parent pid = %d\n", getpid(),getppid());
    }
    return 0;
}

编译执行后输出结果:

fork之前
fork之后
current process is parent process : pid = 71370,parent pid = 62785
fork之后
current process is child process : pid = 71371,parent pid = 1

说明

fork 之前,只有一个进程在执行这段代码;

fork之后,就有两个基本上一模一样的进程了,都会执行fork行之后的代码;

而且可以看到两个进程的pid不一样,这是为什么?

fork是执行一次,返回两次,可能有三种返回值:

  • 在父进程中,fork返回新创建的子进程的pid;
  • 在子进程中,fork返回0;
  • 如果出现错误,fork返回一个负值;

两个进程的执行没有固定的顺序,得看系统进程调度策略.

fork失败可能的原因是:

  • 进程数量达到最大限制
  • 内存不足

文章作者: 姜康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜康 !
评论
 上一篇
Android中的ANativeWindow Android中的ANativeWindow
ANativeWindow是什么ANativeWindow是C/C++中定义的一个结构体,等同于Java中的Surface. Android NDK中可以访问到ANativeWindow. ANativeWindow中存放像素信息的结构是:
2020-06-19
下一篇 
UART UART
UARTUniversal Asynchronous Receiver/Transmitter,即通用异步收发传输器 UART是一种串行(串口),异步,收发协议. 作用:将并行数据转换成串行数据,所谓串行就是一位一位的传输. 像GPS模块,
2020-06-13
  目录