1.4号io网络

1.多进程

引入目的:让多个任务实现并发执行

并发执行:同一时间只有一个进程执行,通过时间轮询调度多个进程,由于时间每个进程所用时间极短,所以宏观表现为多个进程同时进行。

并行执行:多个任务器执行多个进程,同一时间多个进程在执行。

1.1进程概念

1.程序的一次运行过程称为进程

2.进程是有生命周期的,是一个动态过程,分为创建态、就绪态、运行态、阻塞态、消亡态

3.进程是资源分配的最小单位,系统会给每个进程分配4G的虚拟内存,其中0--3G的用户空间是独立的,3--4G的内核空间时共享的

4.进程是独立的,可以被任务器调度,调度的原则是时间片轮询、上下文切换

1.2进程的内存管理

1> 系统会给每个进程分配4G的虚拟内存

2> 多个进程会独立拥有0--3G的用户空间,用户空间又分为栈区、堆区、静态区

3> 多个进程共享一份内核空间

4> 物理内存:内存条(硬件上)真正存在的存储空间

5> 虚拟内存:程序运行后,有4G的虚拟地址,由物理内存通过内存映射单元映射而来,在需要使用内存的时候,会映射到物理内存上

6> 在32位操作系统上,虚拟内存的空间是4G

在64位系统上,虚拟内存的空间是256T = 2^48

1.3进程和程序的区别

进程:进程是动态的,进程是程序的一次执行过程,有生命周期,进程会为自己分配内存空间,是资源分配的最小单位

程序:程序是静态的,没有所谓的生命周期,它是在磁盘上存放的二进制文件

1.4进程的种类

进程一共分为三类:交互进程、批处理进程、守护进程

交互进程:他是由shell控制,可以直接与用户进行交互,例如文本编辑器

批处理进程:维护了一个队列,被放入队列中的进程会统一进行处理。例如gcc编译器的一步到位的编译

守护进程:脱离终端而存在的进程,随着系统的启动而运行,随着系统的关闭而结束。例如服务进程

1.5进程的PID概念

PID:进程号(process ID)

PPID:父进程号

进程号是进程的唯一标识,他是一个大于等于0的一个整数,并且每个进程的进程号不会重复

每个进程都是继承父进程而得到的,所以每个进程都会有父进程

在linux系统中的根目录下的proc目录中,存放的以数字命名的都是一个进程

1.6特殊的进程

1> 系统启动后,至少要运行三个特殊进程,进程号分别是 0、1、2

2> 0号进程:又称为 idel进程,他是有linux系统启动后的第一个进程,是1号和2号进程的父进程,这个进程也叫空闲进程,当系统中的其他进程都不执行时,运行该进程。

3> 1号进程:称为 init进程,是由0进程产生,完成一些系统启动时的必要初始化工作,也是孤儿进程的父进程,可以完成对孤儿进程的收尸工作

4> 2号进程:称为kthreadd进程,是右0号进程产生,用于调度相关进程,也称调度进程

5> 孤儿进程:当前进程还在运行,但是其父进程已经退出,该进程称为孤儿进程,会被init进程收养

6> 僵尸进程:当前进程已经运行结束,但是其父进程没有为其收尸

1.7有关进程的shell指令

查看进程信息指令:ps

ps -ef : 可以查看进程间的关系

ps -ajx:可以查看进程的状态

ps -aux:可以查看当前进程所占内存和cpu的资源占有率

top指令:动态查看进程相关信息

htop指令:带颜色查看进程相关信息

单独获取进程的进程号:pidof 进程名

向进程发送信号指令:kill指令  (重点)

使用格式:kill -信号号 pid

能够发送的信号,可以通过指令kill -l 查看.

2.进程状态

2.1进程状态的描述

man ps

2.2进程状态的切换

进程主要的状态一共有五种:创建态、就绪态、运行态、阻塞态、死亡态

2.3具体状态转换的实例

运行一个可执行程序,并查看其状态

查看后台运行进程的作业号:jobs

将停止的进程,切换到后台运行:bg 作业号

将后台运行的进程,切换到前台运行:fg 作业号

直接将程序运行于后台:./a.out &

3.多进程编程

3.1创建进程

1.进程创建过程是子进程拷贝父进程的资源,进而产生一个独立的进程个体,子进程会拥有父进程在创建进程之前的所有资源

2.创建进程的api函数 fork

#include <sys/types.h>

#include <unistd.h>

pid_t fork(void);

功能:创建出一个子进程

参数:无

返回值:在父进程中,该函数返回子进程的pid号,在子进程中该函数返回0,失败返回-1并置位错误码,并且不会创建出子进程

注意:当子进程创建出来后,父子进程都会执行fork之后的语句

3.不关注返回值的情况时,n个fork会产生2^n个进程,并且多个进程之间没有先后顺序执行

3.2getpid/getppid 进程号的获取

#include <sys/types.h>

#include <unistd.h>

pid_t getpid(void);

功能:获取当前进程的pid号 参数:无 返回值:成功返回当前进程的pid号,不会失败

pid_t getppid(void);

功能:获取当前进程的父进程的pid号 参数:无 返回值:成功返回当前进程的父进程pid号,不会失败

3.3exit/_exit 进程退出函数

#include <stdlib.h>

void exit(int status);

功能:刷新标准io的缓冲区后,退出进程 参数:进程退出时的状态,会将 status&0377的结果返回给父进程 EXIT_SUCCESS(0):表示成功退出 EXIT_FAILURE(1):表示失败退出 返回值:无

#include <unistd.h>

void _exit(int status);

功能:不刷新标准io的缓冲区,直接退出进程 参数:进程退出时的状态,会将 status&0377的结果返回给父进程 EXIT_SUCCESS(0):表示成功退出 EXIT_FAILURE(1):表示失败退出 返回值:无

3.4wait/waitpid 进程资源的回收

#include <sys/types.h>

#include <sys/wait.h>

pid_t wait(int *wstatus);

功能:阻塞等待子进程的结束并回收子进程的资源,如果子进程不退出,则父进程会一直在该函数处阻塞 参数:接受子进程退出时的状态,一般填NULL,表示不接收 返回值:成功返回退出的子进程的pid号,失败返回-1并置位错误码

pid_t waitpid(pid_t pid, int *wstatus, int options);

功能:可以阻塞也可以非阻塞形式回收子进程的资源

参数1:进程号 >0:表示回收特定的子进程的资源(常用) =0:回收当前进程所在进程组中的任意一个子进程 =-1:表示回收任意一个子进程 (常用) <-1:表示回收其他组(组id为pid的绝对值)中的任意一个子进程

参数2:接收子进程退出时的状态,一般填NULL,表示不接收

参数3:是否阻塞的选项 0:表示阻塞 WNOHANG:表示非阻塞回收

返回值:>0:表示成功回收一个子进程,返回该子进程的pid =0:非阻塞回收资源时,没有子进程退出,该函数返回0 =-1:失败返回-1并置位错误码

3.5创建三个进程

三进程拷贝两个文件,第一个 子进程拷贝前半部分,第二个子进程拷贝后半部分

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】Graphviz的安装和使用

graphviz包可以用来决策树可视化&#xff0c;只安装包之后直接import使用会报错&#xff0c;因为graphviz是一个要单独安装的软件。 下载路径&#xff1a;Download | Graphviz 有不同的版本&#xff0c;我这里用的是最新版 9.0版本安装之后可以选自动添加到环境变量——系统…

LeetCode刷题12:贪心算法解决1402.做菜顺序

一个厨师收集了他 n 道菜的满意程度 satisfaction &#xff0c;这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间&#xff08;包含之前每道菜所花费的时间&#xff09;乘以这道菜的满意程度&#xff0c;也就是 time[i]*sa…

[De1ctf 2019]SSRF Me

目录 具体做题分析&#xff1a; 字符串拼接&#xff1a; 哈希拓展攻击&#xff1a; 点开是一段flask代码&#xff0c;经过还原后格式如下&#xff1a; #!/usr/bin/env python# encodingutf-8from flask import Flask, requestimport socketimport hashlibimport urllibimpo…

pod节点jar包替换流程

1、查找到该docker容器 docker ps | grep backend # ./entrypoint.sh文件启动的那个容器2、替换jar 包 mv xxx.jar app.jar docker cp app.jar 66bc6fea9fb5:/home/aimind/3、重启容器 docker restart 66bc6fea9fb5 4、重启容器后进行功能验证 功能验证没问题了&#xff0c;再…

决策树--CART回归树算法详解

1、介绍 &#xff08;1&#xff09;简介 CART&#xff08;Classification and Regression Trees&#xff09;回归树是一种基于决策树的机器学习算法&#xff0c;用于预 测连续型目标变量而不是离散型类别变量。 &#xff08;2&#xff09;生成过程 ① 选择一个特征和相应的…

在win10上cuda12+tensorrt8.6+vs2019环境下编译paddle2.6生成python包与c++推理库

paddle infer官方目前没有发布基于cuda12的c库&#xff0c;为此参考https://www.paddlepaddle.org.cn/inference/user_guides/source_compile.html实现cuda12的编译安装&#xff0c;不料博主才边缘好自己的paddle2.6&#xff0c;paddle官方已经发布了cuda12.0的paddle2.6框架。…

全视通发表“物联网赋能智慧医院建设”主题演讲获关注

邕州山河&#xff0c;神州沃壤。近日&#xff0c;备受瞩目的“2024广西医院和实验室建设学术年会暨净化专业委员会成立六周年庆典”在广西南宁圆满召开。作为智慧医康养整体方案提供商&#xff0c;全视通受邀参会并发表了主题为“物联网赋能智慧医院建设”的演讲&#xff0c;深…

1873_ssh scp的速度限制设置

全部学习汇总&#xff1a; GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 正常情况下&#xff0c;我们对于传输速度的要求自然是越快越好。不过凡事也有一个例外&#xff0c;比如我遇到的一个场景&#xff1a;经过了内网穿透的环境&a…

Web前端篇——ElementUI之el-scrollbar + el-backtop + el-timeline实现时间轴触底刷新和一键返回页面顶部

ElementUI之el-scrollbar el-backtop el-timeline实现时间轴触底刷新和一键返回页面顶部。 背景&#xff1a;ElementUI的版本&#xff08;vue.global.js 3.2.36&#xff0c; index.css 2.4.4&#xff0c; index.full.js 2.4.4&#xff09; 废话不多说&#xff0c;先看动…

卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

解决任何真实问题的重要一步是获取数据&#xff0c;Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集&#xff0c;并对其进行一定的操作&#xff0c;以正确的导入到我们的计算机&#xff0c;为接下…

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化&#xff0c;大家最熟悉的就是 selenium 了&#xff0c;selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe&#xff0c; 但这3个都需要掌握 JavaScript 语言&#xff0c;所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…

使用openssl 生成pfx格式证书时报错:unable to load certificates

问题现象包如下&#xff1a; 之前在centos上使用openssl部署证书服务器以及颁发证书的时候遇到的问题&#xff0c;在进行个人证书生成之后需要形成pfx格式证书&#xff0c;结果过程中报错了。网上类似资料比较少&#xff0c;做个记录。 生成pfx格式证书的命令&#xff1a; o…

Eureka的自我保护机制

一&#xff1a;Eureka的自我保护机制是什么&#xff1f; 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式&#xff0c;Eureka Server将会尝试保护其服务注册表中的信息&#xff0c;不再删除服务注册表中的数据&#xff0c;也就是不…

springCould中的Hystrix【下】-从小白开始【8】

目录 &#x1f9c2;1.熔断机制❤️❤️❤️ &#x1f32d;2.修改8001服务 ❤️❤️❤️ &#x1f95e;3.测试 ❤️❤️❤️ &#x1f953;4. 服务监控hystrixDashboard❤️❤️❤️ &#x1f32d;5.仪表盘❤️❤️❤️ &#x1f9c2;6.仪表盘的使用 ❤️❤️❤️ 1.熔断机…

LibVLC中播放、录制

video 1&#xff1a;首先官网下载vlc库 2&#xff1a;将下载的库添加到工程目录 3&#xff1a;添加功能接口 bool QtVLCWidget::playMedia(const char* url, PlayType type) {if (type PT_Url){m_media libvlc_media_new_location(url);}else if (type PT_LocalFile){m_med…

设计模式④ :分开考虑

一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》&#xff08;【日】结城浩 著&#xff09;。该系列文章可随意转载。 …

实验二 Linux文件编程

一、实验目的与任务 目的&#xff1a;了解掌握文件系统特点与功能&#xff0c;学会借助文件系统的功能函数进行编程。 任务&#xff1a;利用C语言指令编写程序调用文件系统函数&#xff0c;完成相应功能。 二、实验设备 装有Linux操作系统的计算机一台。 三、实验要求 1&…

电源芯片浪涌电流如何产生?该怎么测试?

对于电源芯片的设计和制造商来说&#xff0c;防止芯片受到电源干扰是非常重要的。为了保障芯片能正常稳定运行&#xff0c;浪涌测试无疑是必要的。本篇文章将全方位为你介绍浪涌电流如何产生以及如何测试的过程。 电源芯片浪涌电流的产生原因 1.开关电源切换和电压突变 在电源开…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

软件测试|MySQL主键约束详解:保障数据完整性与性能优化

简介 主键&#xff08;PRIMARY KEY&#xff09;的完整称呼是“主键约束”&#xff0c;是 MySQL 中使用最为频繁的约束。一般情况下&#xff0c;为了便于 DBMS 更快的查找到表中的记录&#xff0c;都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统&am…