目录

1.进程的创建

fork函数初识

fork函数返回值

写时拷贝

fork常规用法

2.进程终止

进程退出场景

进程常见退出方法

进程退出返回值的意义:


1.进程的创建

fork函数初识

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。

pid_t  fork(void)--通过复制父进程创建一个新的子进程

特点:代码共享,数据独有

返回值:对于父进程返回新创建的子进程的pid;对于子进程返回0;出错创建失败返回-1。

可以通过返回值进行代码分流,让父子进程进入不同的if语句分支进行运行

进程调用fork,当控制转移到内核中的fork代码后,内核做:

·分配新的内存块和内核数据结构给子进程

·将父进程部分数据结构内容拷贝至子进程

·添加子进程到系统进程列表当中

·fork返回,开始调度器调度

实例:

#include <stdio.h>
#include <unistd.h>int main()
{printf("hello world!\n");pid_t ret=fork();printf("i am over!\n");return 0;
}

运行结果:

hello world!

i am over!

i am over!

所以,fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器 决定。

fork函数返回值

子进程返回0

父进程返回的是子进程的pid

写时拷贝

子进程复制了父进程中的大部分的信息,因此子进程有自己的变量,但是自己的变量经过页表映射后与父进程访问的是同一块物理内存,当这块内存空间中的数据即将要修改,则给子进程重新开辟内存空间,并拷贝数据过去。

fork常规用法

·一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如,父进程等待客户端请求,生成子 进程来处理请求。

·一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数。

2.进程终止

进程退出场景

代码运行完毕,结果正确

代码运行完毕,结果不正确

代码异常终止

进程常见退出方法

正常终止:

1.在main函数中return 返回(仅在main函数中使用是退出程序运行)

2.库函数:void exit(int retval)--在任意位置调用,都可以退出程序运行

3.系统调用接口:void _exit(int retval)--在任意位置调用,都可以退出程序运行

exit和_exit的区别:退出程序运行前,exit会将缓冲区的数据刷新写入文件中,而_exit不会。

异常终止:

ctrl+c ,信号终止

实例:

int main()
{printf("hello");exit(0);
}

运行结果:

[root@localhost linux]# ./a.out hello

[root@localhost linux]#

int main()
{printf("hello");_exit(0);
}

运行结果:

[root@localhost linux]# ./a.out

[root@localhost linux]#

进程退出返回值的意义:

return以及exit给与的数据其实就是进程的退出码

作用:

一个程序运行起来是为完成一个任务,这个任务完成的怎样外界如何得知?

因此就必须有这个进程的退出码,来表示进程任务处理的结果

进程控制——创建,终止相关推荐

  1. Linux_进程控制(创建进程,等待进程,进程终止)

    文章目录 1.创建进程 1.1 fork()函数初识 1.2 fork()创建进程代码示例 2.等待进程 2.1 进程等待概念 2.2进程等待必要性 2.3 进程等待方法 2.3.1 wait 2.3 ...

  2. 操作系统(二 )| 进程管理初探(前趋图、程序执行、进程的定义特征基本状态,进程的创建终止,阻塞唤醒,挂起激活)

    文章目录 前趋图和程序执行 前趋图 程序的顺序执行 程序的并发执行 进程的定义和特征 进程的基本状态 就绪状态 运行状态 阻塞状态 挂起状态 进程控制块(PCB) 作用: 块中信息: PCB的组织方式 ...

  3. Linux 进程控制(创建/退出/等待/替换)

    目录 进程创建 fork()函数 fork返回值 fork写时拷贝 fork失败原因 fork用法 进程退出 退出场景 常见的退出方法 正常退出 异常退出 _exit()系统调用 exit()函数 _ ...

  4. Linux——详解进程控制之终止

    目录 一.进程终止概念 二.return.exit()._exit()含义使用与相互关系 ①_exit() ②exit() ③return ④相互关系 三.查看终止信息 ①strerror ②echo ...

  5. 【Linux】进程控制(创建、终止、等待)

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:[Linux]欢迎支持订阅 相关文章推荐: [Linux]冯.诺依曼体系结构与操作系统 [Linux]进程理解与学习Ⅰ-进程概念 [ ...

  6. 进程控制-创建、退出、等待、替换

    目录 进程创建 1.子进程继承 2.写时拷贝 进程退出 echo $? 退出码 进程异常退出的情况模拟: 退出进程的方式 退出码的意义: 进程退出,在系统中发生了什么? 进程等待 为什么要有进程等待呢 ...

  7. 【操作系统/OS笔记09】线程、线程的实现、上下文切换、进程控制

    本次笔记内容: 7.8 为什么使用线程 7.9 什么是线程 7.10 线程的实现 7.11 上下文切换 7.12 进程控制--创建进程 7.13 进程控制--加载和执行进程 7.14 进程控制--等待 ...

  8. 模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制

    进程(Process) 的定义 从不同的角度,进程可以有不同的定义,传统典型的定义: 进程是程序的一次执行过程. 或者:一个正在执行的程序的实例 进程是一个程序及其数据在处理机上顺序执行所发生的活动 ...

  9. 进程控制:进程的创建、终止、阻塞、唤醒和切换

    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程.撤销已有进程.实现进程状态转换等功能.在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不 ...

最新文章

  1. 23行代码_动图展示——快排详解(排序最快的经典算法)
  2. JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用
  3. java发送http跨域_跨域发送HTTP请求详解
  4. 大数据入门初学者需要学习的内容及学习路线详解
  5. 【滑动窗口】leetcode209:长度最小的子数组
  6. RDKit 安装教程
  7. 微信公众账号api开发
  8. MacBook将大文件分割成很多个小文件split命
  9. 使用paddlepaddle进行手写数字识别
  10. 腾讯2017秋招笔试编程题--游戏任务标记
  11. 实践一 网络攻防环境的搭建
  12. BOJ 1433 Tom 的潜望镜 优先队列+BFS
  13. EXCEL将一个单元格分成3个区域
  14. 乘法原理的例题和答案_加法原理与乘法原理练习题
  15. 人工智能在游戏设计中的应用
  16. 从PDF直接复制粘贴过来可以吗?其他软件的数据怎么导入Excel?
  17. 计算机安装Hp1005打印机,如何安装hp1005打印机驱动程序_安装步骤是什么
  18. 国内IDC数据中心星级评判标准怎么划分
  19. GPS北斗授时服务,NTP让网络时钟同步更精确
  20. 英语四六级写作救命万能表达

热门文章

  1. Matlab自适应滤波算法 LMS小白通俗易懂版
  2. SSL虚拟专用网络通信分析
  3. Android组件化和插件化开发
  4. C语言中的输入和输出
  5. (详细图示)IDEA彻底删除项目
  6. python识别图片内容并获取两个地点间的距离
  7. 《王者荣耀》员工年终奖100个月工资,瞬间受到一万点暴击!
  8. 怎么解决WIN7 连接samba连接不上的问题
  9. html怎么使文档省略号显示,html 文本超出部分 省略号显示
  10. 清华镜像站下载android源码