linux操作系统进程控制详解

本文详细介绍了Linux下的进程控制,包括进程创建的fork函数和写时拷贝机制,进程终止的正常与异常退出,进程等待的重要性及wait、waitpid方法,以及进程程序替换的概念和exec函数家族的使用。通过本文,读者将对Linux进程控制有更深入的理解。
摘要由CSDN通过智能技术生成

目录

前言

一、进程创建

1、fork函数

 2、写时拷贝

二、进程终止

1、退出码

 2、进程常见退出方法

2.1  正常退出

 2.2 异常退出

三、进程等待 

1、进程等待的必要性

2、进程等待的方法

2.1 wait方法

2.2 waitpid方法

3、阻塞等待和非阻塞等待

四、进程程序替换 

1、替换原理

2、替换函数 

2.1 函数解释

2.2 命名理解

总结


前言

哈喽,小伙伴们大家好,今天我来带大家了解一下进程控制的相关知识。我将主要从四个方面进行讲解,分别是进程创建、进程终止、进程等待和进程替换。希望小伙伴们看完本文后能对进程有更加深刻的认识。


一、进程创建

1、fork函数

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

  • fork函数有两个返回值:子进程中返回0,父进程返回子进程pid,出错返回-1。
  • fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器决定。

fork的基本使用在上一篇文章中介绍过,这里不做赘述,下面我们重点思考两个问题。

(1)为何要给子进程返回0,给父进程返回子进程的pid?

计算机中的父子关系和现实中的父子关系一样,一个父亲可以有多个孩子,但一个孩子只能有一个父亲。假设老王有三个儿子,三个儿子统一管老王叫爸爸即可。但当三个儿子同时在场时,老王想要找他们中的一个时不能简单的称呼为儿子,因为这样会造成混淆,必须叫他们对应的姓名才能加以区分。

在操作系统中也是如此,父进程不需要标识,子进程需要标识,子进程是要执行任务的,父进程需要对它们进行区分。

(2)如何理解fork有两个返回值的问题?

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

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程部分数据结构内容拷贝至子进程
  • 添加子进程到系统进程列表当中

在返回之前,这一系列操作已经完成,子进程已经创建成功,返回这条代码由父子进程一起执行,所以有两个返回值。

fork调用失败的原因:

  • 系统中有太多的进程。
  • 实际用户的进程数超过了限制。

 2、写时拷贝

通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。

为何需要写时拷贝?

因为进程具有独立性,要保证两个进程的数据不互相干扰。

那么为何不在一开始就把数据分开呢?

因为子进程不一定会用到或写入父进程的所有数据,如果把所有数据都拷贝一份的话会造成内存浪费。写时拷贝可以保存按需分配,同时也满足了延时分配,就好比银行一样,有人取钱时它才会给,其余时间就可以自由支配这些资源,达到资源利用的最大化。

二、进程终止

1、退出码

进程运行的目的是为了完成某种工作,那么这种工作有没有成功完成呢?进程需要给出一个反馈,来供用户查看工作是否返程,这种反馈就叫做退出码。

指令: echo $?    打印最近一次的退出码

进程退出场景: 

  • 代码运行完毕,结果正确
  • 代码运行完毕,结果不正确
  • 代码异常终止

前两种退出场景:当代码运行结果正确时,退出码为0,当代码运行结果不正确时,退出码为非0。因为成功了就是成功了,不需要加以解释,而失败了一般都是有原因的,需要将失败的原因反馈出来。不同的非0值代表着不同的失败原因。由于计算机是很擅长处理数字的,所以退出码在计算机中是以数字的形式传递

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值