进程的创建和退出

进程的创建和退出
1.Linux进程的特点:
每个进程都有自己独立的虚拟地址空间大小为4G,互不干扰、相互独立。(或运行空间:Linux进程虚拟地址空间,每个进程一旦创建,就给4G的虚拟空间)
换句话:每个进程都有自己独立的虚拟地址空间,所有的数据都保存在自己独立的空间内;
Hello.c–>a.out–>加载到内存中
//在所有计算机系统中,内存都是稀缺资源!!!
保护稀缺资源的方法:抽象虚拟物体进行代替;
操作虚拟物体的物体实际上时在操作稀缺资源;
特点:Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。也
就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各
个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常, 它也不会
影响到系统中的其他进程。

Linux进程虚拟地址空间的划分:

用户进程部分分段存储内容如下表所示(按地址递减顺序):
名称 存储内容 特点
栈 局部变量、函数参数、返回地址等 先进后出,系统管理;生命周期是由所在函数决定(局部)
堆 动态分配的内存 先进先出,用户管理(malloc,free);用户决定
BSS段 未初始化或初值为0的全局变量和静态局部变量
数据段 已初始化且初值非0的全局变量和静态局部变量 系统管理;生命周期:全局
代码段 可执行代码、字符串字面值、只读变量

2.进程pid:
2.1 每个进程创建都有自己的id号:
(1)getpid函数:获取调用该函数进程的进程pid
(2)getppid函数:获取调用该函数进程的父进程pid,第个P是parent, 第二个process.
//所有进程创建都是由父进程创建的,父进程创建的进程称为子进程
//Linux系统下所有进程的父进程:init 0
//进程控制块(PCB):每个进程创建都有自己进程控制块(struct task_struct)(pid\ppid\fd\parent\child\os\mem)
3.进程创建
(对于开发人员,只需要知道如何创建进程,至于进程的调度是由OS决定)
3.1 利用fork的返回值
函数原型
#include <unistd.h>
pid_t fork(void);
(1)函数功能
从调用该函数的进程复制出子进程,被复制的进程则被称为父进程,复制出来的进程称为子进程。
/*
fork函数的作用:创建进程
1、给子进程分配空间;
2、拷贝父进程的代码段、数据段到子进程地址空间;
3、给父子进程的pid赋值;
/
/

fork创建的进程:父子进程的执行顺序是随机的
父子进程的调度是由系统决定
*/
(2)函数参数:无参数。
(3)函数返回值:forl返回两次,可能存在三种不同的值(><=0)
1)父进程的fork,成功返回子进程的PID,失败返回-1,errno被设置。
2)子进程的fork,成功返回0,失败返回-1,ermo被设置。
//父进程先与子进程退出,该子进程就是一个僵尸进程(子进程的资源要靠父进程来回收)
进程等待:等待子进程执行结束之后,回收资源
wait(pid);//阻塞等待子进程退出

3.2 Vfork
头文件:
#include<sys/types.h>
#include<unisted.h>
作用:创建子进程;
特点:
执行顺序:子进程执行结束后,,父进程执行

●对fork的改进
●对fork的改进更为彻底、简单粗暴
●vfork是为子进程立即执行exec的程序而专i门设计的
-无需为子进程复制虚拟内存页或页表,子进程直接共享父进程的资源,
直到其成功执行exec或是调用exit退出
-在子进程调用exec之前,将暂停执行父进程

例:

4.进程退出:exit 和_exit
exit:库函数,里面封装了_exit()
exit:系统调用接口API
exit函数退出进程,不会使进程刷新缓冲区;
exit函数在调用_exit之后,会刷新缓冲区
两者的区别
●exit是库函数是对
exit系统调用的封装
●在调用
exit之前,它会执行各种动作
-调用退出处理程序(通过atexit和on
exit注册的回调函数)
-刷新stdio流缓冲区
-使用由status提供的值执行_ exit系统调用

System:在进程中,运行一个程序

Exec函数族

//System 和 exec函数族:
Systen执行的进程不会覆盖原有进程的代码,也就是说不会产生新的进程,pid不会发生改变;
Exec函数族:覆盖原有进程的代码段,创建了新的进程,pid发生变换

—、进程创建三种方法
frok
system
ecec函数族/ execl execv
二、进程退出
exit、_ exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值