Linux 进程(二)

1.当前工作目录

        Linux 下使用 ls /proc 查看程序中的进程,其中这些蓝色的数字代表的就是进程。

        其中cwd(current working directory)就是当前工作目录,那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序,可执行程序需要依赖源代码,所以不管是进程和可执行程序都默认生成在跟源代码同一级的目录下。

        怎么更改当前工作目录呢?

        chdir。 查看chdir的使用手册。

        用法如下,更改完成后,再去查看cwd 就会发现cwd已经更改 。

2. fork():

        首先我们来查看一下fork函数的使用。

        对于fork函数的返回值来说是最奇怪的!!!!

        fork 函数竟然有两个返回值!!这是真的吗?我们来创建程序来实验一下!! 

 

        我们可以惊奇的发现执行fork函数之后,之后的代码竟然执行力两次,并且这两个进程互为父子进程。

        进程= 内核数据结构 + 可执行程序的代码和数据!fork函数创建的子进程也不例外,并且子进程会继承父进程的绝大部分的属性(如代码和数据),这样子进程也会打印出和父进程相同的内容,但是pid就不一样,也是子进程没有继承父进程的属性。

        在上面fork 函数的介绍中说道 fork 函数有两个 返回值,返回给父进程的是子进程的pid,返回给子进程的是 0。是这样的吗?我们写个代码看一下

        如果这两个死循环能够同时跑起来,那么就能说明 id 的值既 大于0 又等于 0 ;

        我们来看程序执行的结果:

        这说明id 的值确实是既大于0 又等于 0。

        在进程当中父进程可以有很多个子进程,但是子进程只能有一个父进程,这就相当于一个人可以有很多个儿子,但只能有一个爹,所以为了更好的辨识子进程,父进程需要子进程的pid。

        下面我们继续实验:

        当我们杀死父进程时候,子进程竟然丝毫没有受到影响! 这说明了父进程和子进程在创建之后都有了独立的代码和数据,彼此不会收到影响。这是因为在fork之后 ,当父、子进程要对数据做修改时,os会介入进来会给子进程在copy一份数据,子进程就对这份数据做修改。既然有了两份数据就有两个返回值也不足为奇了!

        但问题的关键是一个变量怎么会有两个值!但linux下确实可以做到这一点。

3.进程状态

        进程被cpu运行需要在cpu下的队列进行排队,在cpu队列下排队的进程我们都可以叫它运行状态(大多数教材都是这么叫的),被cpu正在执行的也肯定是运行状态

        进程(进程 = task_struct PCB + 可执行程序(狭义上这么说))排队这件事,是进程进程所对应的PCB来排队的。进程在排队的时候,一定是在等待某种资源。

        一、进程不是一直在执行的比如一下代码:

        这个代码被执行后会卡住,因为需要等待键盘输入。

           二、进程放在cpu上也不是一直会运行的。

        比如当我们写一个死循环时,它会一直占用cpu的资源,导致电脑上的其他资源会卡死,但是事实并不是这样的,我们电脑可能会卡一点,但是其他的进程还是能正常的执行。这是系统中有一个叫“时间片”的概念。比如每个进程会执行 1ms 然后就执行下一个进程!

                

        在task_struct pcb 中会有struct_listnode n 通过 这个链表来管理全局的进程。

        n 对象是我们自己搞得那么struct 中别的对象是怎么搞得呢?

        首先将 0 强制转换成结构体指针,然后指向某个成员,这时候就算出偏移量了,然后再用n 的地址减去偏移量 就能够算出 task_struct 的地址,然后在强制转化成该结构体指针。不就能拿到该结构体地址,就能够访问该结构体的任意成员了!

        tast_struct pcb 中有很多个节点,cpu 是一种设备,所以对应的节点都可以链接到对应设备的队列上排队等待获取资源!!!

        进程的状态有 运行,阻塞,挂起。

        运行状态简单的理解就是,PCB在进程队列排队,或者正在被cpu执行。

        状态的不同,决定了你下一步要干什么!!比如你的状态是生病,下一步就是看病!!

        那么操作系统也是这样的,task_struct 中的状态其实就是一个整形变量。如下图:

        当程序走到了scanf 时,那么程序就会卡住,等待从键盘上获取资源。

        这时候操作系统会将该进程的pcb中的某个节点 连接到 对应设备的队列上去,同时该进程已经不在cpu队列了,那么该进程的状态要从运行 ,状态改为阻塞状态!!!这也就是状态的变迁。

        当我们的进程正在等待软硬件资源的时候,资源如果没有就绪,我们进程task_struct 只能

1.将自己设置为阻塞状态。2.将自己的pcb连接到该资源提供的等待队列。

              状态的变迁原因是,os将pcb放到了不同的队列中。

        挂起状态:简单的理解为内存现在吃紧,os将一些不重要的进程写入磁盘,为内存空间辗转腾挪。 

          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/231208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA设计时序约束十、others类约束之Set_Disable_Timing

目录 一、序言 二、Set Disable Timing 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考资料 一、序言 在Vivado的时序约束窗口中,存在一类特殊的约束,划分在others目录下,可用于设置忽略或修改默认的时…

合阔智云:实现API无代码开发,连接ERP系统和CRM系统提高运营效率

概述 合阔智云,一家成立于2011年的科技公司,核心业务是提供云原生和移动化设计的新一代全渠道“云端一体”履约中台和去中心化模式智能门店供应链业务中台。他们的系统可以无需API开发即可实现电商系统和客服系统的连接和集成,大大提高了企业…

Egg.js中Cookie和Session

Cookie HTTP请求是无状态的,但是在开发时,有些情况是需要知道请求的人是谁的。为了解决这个问题,HTTP协议设计了一个特殊的请求头:Cookie。服务端可以通过响应头(set-cookie)将少量数据响应给客户端&#…

基于单片机智能电子密码锁设计

**单片机设计介绍,基于单片机智能电子密码锁设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能电子密码锁设计是一种利用单片机(如Arduino、Raspberry Pi等)和相关电子元件来…

VMware虚机重启后静态IP不生效

配置好一套虚机之后,因为重启电脑,导致虚机的静态ip配置不生效,xshell连接不上虚机。以下是自查和解决方案: 1.使用su -进入root用户 2.查看打开虚机的teminal窗口查看配置的ip文件:vim /etc/sysconfig/network-script…

第八天:信息打点-系统端口CDN负载均衡防火墙

信息打点-系统篇&端口扫描&CDN服务&负载均衡&WAF防火墙 一、知识点 1、获取网络信息-服务器厂商: 阿里云,腾讯云,机房内部等。 网络架构: 内外网环境。 2、获取服务信息-应用协议-内网资产: FTP…

SparkRDD及算子-python版

RDD相关知识 RDD介绍 RDD 是Spark的核心抽象,即 弹性分布式数据集(residenta distributed dataset)。代表一个不可变,可分区,里面元素可并行计算的集合。其具有数据流模型的特点:自动容错,位置…

VBA技术资料MF88:测试Excel文件名是否有效

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

【面试】typescript

目录 为什么用TypeScript? TS和JS的区别 控制类成员可见性的访问关键字? public protected),该类及其子类都可以访问它们。 但是该类的实例无法访问。 私有(private),只有类的成员可以访问…

【RT-DETR改进】SIoU、GIoU、CIoU、DIoU、AlphaIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了RT-DETR的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Alpha”思想,创造了一系列新的损失函数。这些组合形式的…

信号类型(通信)——最小频移键控(MSK)

系列文章目录 《信号类型(通信)——仿真》 《信号类型(通信)——QAM调制信号》 《信号类型(通信)——QPSK、OQPSK、IJF_OQPSK调制信号》 目录 前言 一、MSK信号特点 1.1、最小频移 1.2、相位连续 二…

数字员工:降本提效,强势助力数智化转型,引领新风潮

随着科技迅猛发展,数字化转型已经渗透到各行各业,在数字化进程中,数字员工以其高效、智能的特性引领着未来工作的新风潮。 1.高度自动化与提升效率—— 数字员工以其高度自动化的特性成为企业工作流程中的得力助手,能够在短时间…