liunx操作系统 进程的基本概念

进程的基本概念

  • 计算机结构体系
    • 冯诺依曼
  • 操作系统的管理
  • 进程
    • 进程的特性
      • 标识符
      • 系统的调用 创建新的进程
    • 进程的状态
      • 进程队列
      • 进程的状态
      • 在liunx查看进程状态、

计算机结构体系

冯诺依曼

在这里插入图片描述
在没有存储器之前,所有的信息都是直接进入CPU,这样效率很差,因为读入,写出的速度远远慢于cpu计算的速度。所以中间加入缓存区,让cpu从内存中读取,读取的速度很快。所以冯诺依曼体系,极大层度,弥补了读入和写出速度慢的问题。

操作系统的管理

管理是一个抽象的词,我们可以描述一个管理的场景:
在这里插入图片描述
校长是管理者,督导员是传递消息的,学生是执行者。
回到计算机。 操作系统就是管理者,他是一款管理软件,督导员就是各种驱动,学生则是硬件设备。在操作系统的管理下,操作系统用结构体描述结构体的,该结构体描述了设备的重要特性,通过管理特性数据管理你,比如设置你关机,你就关机。

进程

进程的概念:进程是操作系统最重要的概念,他在书上都是说他是运行起来的程序。
在这里插入图片描述
由操作系统管理进程, 而进程则由两部分组成 进程控制块+运行的程序。运行的程序受到进程控制块pcb的管理。

进程的特性

标识符

进程在win中可以在任务管理器中查看,但是在liunx中只能用命令
在这里插入图片描述
我们也可结合管道
在这里插入图片描述
接下来,我们将看到第一个跑起来的进程
在这里插入图片描述
程序中: 会一直跑接下来我们查看程序的运行情况:

在这里插入图片描述
test是运行起来的程序其pid是其唯一标识符。
我们如何拿到进程的pid号的呢?在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
他的运行代码是:
在这里插入图片描述
重要概念:进程的工作目录
如何查看进程存在的位置呢?
在这里插入图片描述
工作目录
在这里插入图片描述
工作目录是程序写入文件中。比如我们使用程序创建一个文件,那么这个文件就在这里。也就是工作目录。

系统的调用 创建新的进程

首先认识一个函数fork
在这里插入图片描述
fork函数的功能如下:
为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

此时我们便可以通过返回值的不同:让父子进程干不同的事情。
在这里插入图片描述

进程之间是相互独立的,杀掉子进程,不影响父进程。同样,杀掉父进程,也不影响子进程。

进程的状态

进程队列

在这里插入图片描述
当程序中向硬件读取数据时,进程就会一直等着。当然,cpu并不是一直只为一个进程提供服务,在一个时间片内,cpu只为此进程提供服务。此时,排队就是必要的了。注意,此时排队的是,pcb进程控制块。
在这里插入图片描述小助手: 偏移量的求法:
在这里插入图片描述

进程的状态

进程的一般状态

  1. 运行:运行是程序正在进行的一般状态
  2. 阻塞:阻塞是程序正在等待资源的状态
  3. 挂起:当操作系统内存吃紧,操作系统将阻塞的部分进程拷贝到磁盘中。该进程被暂时挂起。
    等待其实就是排队,也就是pcb代替我进程去排队。

在liunx查看进程状态、

在这里插入图片描述
liunx有以上的几种状态

首选 ,我们写一个运行起来的父子程序。
在这里插入图片描述

在这里插入图片描述
神奇的是 test并不是r状态,而是s状态,s状态是浅度睡眠,浅度睡眠是可以打断的睡眠。D是 深度睡眠,深度睡眠,不可以被杀掉。
接下来,我们看T状态:使用命令kill -19 即可暂停进程

在这里插入图片描述
此时kill -18就可以继续运行

接下来,我们介绍孤儿进程,僵尸进程。
运行下面代码:

#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
using namespace std;int main()
{cout<<"mypid:"<<getpid()<<" "<<"myppid:"<<getppid()<<endl;
pid_t  x=fork();
int i=5;
int k=10;
if(x==0)
{while(i){i--;
cout<<"我是子"<<endl;cout<<"mypid:"<<getpid()<<" "<<"myppid:"<<getppid()<<endl;
sleep(1);}exit(0);}
else
{while(k){k--;
cout<<" 我是父"<<endl;  cout<<"mypid:"<<getpid()<<" "<<"myppid:"<<getppid()<<endl;
sleep(2);
}
}
return 0;
}

当5次循环结束后,子进程结束,子进程并不会直接被干掉,而是变为僵尸进程,僵尸进程是等待父进程接受退出数据用的。
僵尸进程的危害:

  1. 僵尸进程的退出状态必须一直维持下去,因为它要告诉其父进程相应的退出信息。可是父进程一直不读取,那么子进程也就一直处于僵尸状态。
  2. 僵尸进程的退出信息被保存在task_struct(PCB)中,僵尸状态一直不退出,那么PCB就一直需要进行维护。
  3. 若是一个父进程创建了很多子进程,但都不进行回收,那么就会造成资源浪费,因为数据结构对象本身就要占用内存。
  4. 僵尸进程申请的资源无法进行回收,那么僵尸进程越多,实际可用的资源就越少,也就是说,僵尸进程会导致内存泄漏。

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

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

相关文章

智慧公厕:打造智慧城市环境卫生新标杆

随着科技的不断发展和城市化进程的加速推进&#xff0c;智慧城市建设已经成为各地政府和企业关注的焦点。而作为智慧城市环境卫生管理的基础设施&#xff0c;智慧公厕的建设和发展也备受重视&#xff0c;被誉为智慧城市的新标杆。本文以智慧公厕源头厂家广州中期科技有限公司&a…

【Zotero插件】zotero better notes与zotcard联合使用 | 学习资源整理

整体学习&#xff1a; zotero官网&#xff1a;Zotero | Your personal research assistant 官网插件入口&#xff1a;plugins [Zotero Documentation] 初步学习zotero&#xff1a; 【Zotero零基础保姆级教程】 https://www.bilibili.com/video/BV1o3411Q7JQ/?share_source…

Java代码实现获取本机服务的IP地址

要通过Java代码获取一个IP地址的信息&#xff0c;你可以使用多种方法。其中一种常见的做法是通过IP地址查询服务API来获取详细信息&#xff0c;比如地理位置、ISP&#xff08;互联网服务提供商&#xff09;等。这里有一个简单的例子&#xff0c;展示如何使用Java代码调用一个公…

RRT算法学习及MATLAB演示

文章目录 1 前言2 算法简介3 MATLAB实现3.1 定义地图3.2 绘制地图3.3 定义参数3.4 绘制起点和终点3.5 RRT算法3.5.1 代码3.5.2 效果3.5.3 代码解读 4 参考5 完整代码 1 前言 RRT&#xff08;Rapid Random Tree&#xff09;算法&#xff0c;即快速随机树算法&#xff0c;是LaVa…

Latex中大括号书写多行方式【已解决】

在写论文时需要写一个非1即0的公式&#xff0c;因此写了这篇文章。 本文主要分为两个部分&#xff1a;1.在括号外赋值、2、在括号内赋值 1.在括号外赋值 示例 \begin{equation}A\begin{cases}1x, x \textgreater 0\\1-x, x \leq 0 \end{cases} \label{KD} \end{equation} 效…

qt_xml文件

文章内容 简单介绍xml文件的增删改查写生成和读取xml文件的例子增删改查 Qt提供了QDomDocument类来操作XML文件。 增加节点: QDomElement root = doc.createElement("root"); doc.appendChild(root);QDomElement element = doc.createElement("element"…

Dockerfile(4) - RUN 指令详解

RUN 运行命令 shell 形式 命令在 shell 中运行Linux 上默认为 /bin/sh -cWindows 上 cmd /S /C RUN <command> exec 形式 RUN ["executable", "param1", "param2"] 必须双引号&#xff0c;不能是单引号 两种写法的实际栗子 RUN …

Linux系统运维命令:终止监听在 TCP端口80上的所有进程(使用lsof,grep,awk组合命令, 终止监听在 TCP某个端口上的所有进程)

目 录 一、需求 二、解决方法 1、解决思路 2、命令 三、实例演示和命令解释 1、实例演示 &#xff08;1&#xff09;查看目前有哪些在TCP端口80监听的进程 &#xff08;2&#xff09;、使用命令 &#xff08;3&#xff09;、查看效果 2、命令解…

前端vue后端go实现大文件分片下载

先获取文件大小&#xff0c;然后将文件切片传输给前端&#xff0c;前端再按顺序组合所有切片。 vue /** 下载数据 */handleDownloadInstance(id, instanceName) {if (this.downloadProgressisVisible) {this.$showError(已经有文件在下载!)return}this.$showInfo(开始下载!)ge…

CrossOver2024电脑虚拟机软件详细介绍概述

CrossOver是由CodeWeavers开发的一款系统兼容软件&#xff0c;它能够在Mac和Linux操作系统上直接运行Windows应用程序&#xff0c;而无需创建或启动完整的Windows虚拟机。CrossOver通过模拟Windows应用程序所需的运行环境&#xff0c;实现了跨平台的无缝集成和高效运行。 Cross…

unity学习(42)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——服务器收包1

1.首先保证服务器接受到的信息正确&#xff0c;在服务器的LogicHandler.cs中做第一次分拣&#xff1a; public void process(Session session, SocketModel model) {try{switch (model.Type){case 0:LoginHandler.getInstance().process(session, model);break;case 1:MapHand…

LeetCode 3:寻找最长不含重复字符的子串长度

LeetCode 3&#xff1a;寻找最长不含重复字符的子串长度 在字符串处理中&#xff0c;寻找最长不含重复字符的子串长度是一个经典问题。 问题描述 给定一个字符串 s &#xff0c;我们需要找出其中不含有重复字符的最长子串的长度。 解决方案 我们可以使用滑动窗口的方法来解…

振动解调用的包络谱计算

1缘起 在振动分析中&#xff0c;对于一些高频频点的分析计算&#xff0c;使用包络谱技术&#xff0c;进而得到特化谱是最适宜的。 1.1 包络谱是什么样子的&#xff1f; 我们看matlab信号分析中提供的一个实例&#xff1a; https://www.mathworks.com/help/signal/ug/comput…

07_html

文章目录 引言前端概述分类 HTML快速入门重要的body标签注释hr标签br标签一些常见的标签标题标签div标签span标签p标签a标签img标签路径问题 ol和ul标签table标签input标签&#xff08;表单元素&#xff09;textarea标签&#xff08;表单元素&#xff09;select标签&#xff08…

Scrapy与分布式开发(2.1.2):python常用网络请求库httpx

Python httpx 模块详细讲解 一、引言 httpx 是一个用于发送 HTTP 请求的 Python 库,它提供了简单易用的 API,支持同步和异步请求,并且具有出色的性能和灵活性。httpx 是 requests 的一个现代替代品,它使用 httpcore 作为底层传输层,支持 HTTP/1.1 和 HTTP/2 协议。 二、…

软考50-上午题-【数据库】-SQL访问控制

一、SQL访问控制 数据控制&#xff0c;控制的是用户对数据的存储权力&#xff0c;由DBA决定。 DBA&#xff1a;数据库管理员。 DBMS数据控制应该具有一下功能&#xff1a; 1-1、授权语句格式 说明&#xff1a; 示例&#xff1a; 1-2、收回权限语句格式 示例&#xff1a; PUBLI…

C#知识点-19(七大设计原则、通过反射破坏单例设计模式、基于Task的异步编程模型、Winform中的异步)

通过反射&#xff0c;破坏单例设计模式 internal class Program{static void Main(string[] args){//懒汉式//for (int i 0; i < 10; i)//{// Thread th new Thread(() > {// LazyManClass lazyManClass LazyManClass.GetLazyMan();// });// th.Start…

Java Spring Boot面试题解析

1. 什么是 Spring Boot&#xff1f;【重点】 多年来&#xff0c;随着新功能的增加&#xff0c;Spring变得越来越复杂&#xff1b;一个Spring项目&#xff0c;我们必须做添加构建路径或添加Maven依赖关系&#xff0c;配置应用程序服务器&#xff0c;添加Spring配置等工作&#…

Flutter开发进阶之Flutter Web加载速度优化

Flutter开发进阶之Flutter Web加载速度优化 通常使用Flutter开发的web加载速度会比较慢,原因是Flutter web需要加载的资源处于国外,以下是据此所做的相应优化。 一、FlutterWeb打包 flutter build web --web-renderer canvaskit使用新命令打包 flutter build web --web-…

matlab批量替换txt文本文件的特定行的内容

1.下图所示&#xff0c;我想要替换第14行。 2.运行代码后&#xff0c;第14行已经更改为需要的内容。 clc,clear; %%----------------------需要更改的地方------------------------------------ % 设置要操作的文本文件路径&#xff0c;替换为你自己的文件路径 path D:\paper_…