当前位置:   article > 正文

linux开发——进程篇(二) fork()创建进程_进行进程创建程序编码,要求使用fork()函数创建进程,父子进程中 分别使用循环方式

进行进程创建程序编码,要求使用fork()函数创建进程,父子进程中 分别使用循环方式

进程创建过程

1、在父进程中执行fork()函数时,父进程会复制出一个子进程
2、父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行
3、父子进程分别获得其所属fork()的返回值,fork()在父进程中返回子进程ID,在子进程中返回0
4、通过判断返回值来判定是父进程还是子进程,从而执行相应的动作

fork()函数的使用

每个进程都对应一个进程号称做pid,pid用于标识进程,其实就是一个整数;由于每个进程的产生都来自它的父进程,所以也有对应的父进程号称做ppid(parent process ID)。
使用linux内核提供的fork()函数可以创建出一个子进程,子进程返回0,父进程返回子进程的id,出错则返回-1。

类型说明
所需头文件#include <unistd.h>
函数原型pid_t fork(void)
返回值0:表示子进程 。大于0:表示父进程。-1:表示出错

说明:fork()的返回值类型pid_t是一个宏,其实就是一个整数,如果要使用pid_t这个类型,要加头文件#include <sys/types.h> ,本案例中直接定义整数代替,是一样的。
getpid():获取此进程ID
getppid():获取父进程ID
fork.c

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

/**
 *功能:创建一个进程
 *作者:Maker&xiong
 *时间:2020.4.13
 */
int main(){
    
    int pid = fork();
    if(pid == -1){
        printf("出错了\n");
    }else if(pid == 0){//子进程
        printf("我是子进程 pid:%d,ppid::%d\n",getpid(),getppid());
    }else{//父进程
        sleep(1);//让父进程睡1秒,避免子进程还没创建父进程就结束了
        printf("我是父进程 pid:%d,ppid::%d\n",getpid(),getppid());

    }
	return 0;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

运行结果:
运行结果
进程模型:

终端进程2268___
父进程5744___
子进程5745__.

当运行fork.c文件的时候,刚开始这个程序产生的进程pid为5744,当执行到fork()函数的时候,产生一个它的子进程,pid为5745。而进程5744的父进程就是执行fork.c程序的终端进程。为了验证结果,我们可以在父进程中写一个死循环,不让程序终止。

printf("我是父进程 pid:%d,ppid::%d\n",getpid(),getppid());
for( ; ; );//放一个死循环用于验证结果
  • 1
  • 2

执行程序后,再开启一个终端,输入命令查看进程id:

ps -ef|grep a.out
  • 1

可以看到a.out文件的进程id为5744,在它之下有个子进程5745,<defunct>表示该子进程已经执行完毕,是个僵尸进程。而a.out的父进程id为2668,输入命令查看2668的进程,可以看到2668进程是bash,也就是终端,在终端进程产了一个a.out这个子进程,id为5744。结果验证完毕。
在这里插入图片描述

总结

1、fork()创建进程时,子进程会将父进程几乎所有内容复制过来,子进程独有的只有它的进程号、资源使用和计时器等
2、因为子进程几乎是父进程的安全复制,所以父子进程会运行同一个程序。因此需要用一种方式区分它们,并使他们照此运次,否则,这两个进程不可能做不同的事。(即使用if…else等方式区分)
3、fork()在父子进程中的返回值是不一样的,父进程返回子进程ID,子进程返回0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/883016
推荐阅读
相关标签
  

闽ICP备14008679号