OS-process

news2025/1/7 7:08:45

process

什么是进程

进程是被加载到内存中、正在运行的程序;多个进程可能对于同一个程序、一个正在运行的OS中会有多个进程

进程是程序的一次执行过程,是操作系统分配资源的基本单位

作业等同于进程

进程的布局:

img

每个进程都有一个不同的栈(函数调用,局部变量)

heap:动态分配内存

data section:存静态变量

text:程序代码

img

进程的状态

img

一个处理器上只有一个进程可以running,四核的机器可以有四个进程在running

操作系统会用PCB来表示进程,每个进程有且仅有一个PCB,PCB是进程的唯一表征

PCB在内存里

img

进程的创建

一个进程可以创建新的进程,创建新的进程是系统调用

传统的Unix系统用进程init作为所有用户进程的根进程,最近的Linux版本中,init被systemd替换了。systemd功能类似于init,但提供了更多服务

当子进程被创建时会需要一定的资源来完成任务。它可以从操作系统那里直接获取,也可以从父进程集继承(共享)一些资源

Unix系统中使用系统调用fork()来创建一个新进程,新进程时父进程的一份拷贝,它们只有pid和ppid不同以及子进程的当前内存使用记录为0,除此以外全部相同,fork()对父进程返回子进程的pid,对子进程返回0

fork()相当于创建副本

让子进程去干另外一件事就用excute系统调用

fork() :开一个进程,对于父进程的fork返回的是子进程的pid,子进程返回的fork是0

子进程用的还是父进程的代码,子进程对全局变量的修改不影响父进程

系统调用getpid()和getppid()可以分别获取进程的pid和ppid

进程的终止

系统调用exit()会使得进程终止,C语言main函数隐式返回exit()。除此之外进程也会由于一些信号、异常等终止

wait使得当前进程进入waiting状态,并在任一子进程终止或被信号停止、回复时进入ready状态,同时返回该事件的子进程的pid

当一个进程终止时,它进入terminated状态,它的资源被操作系统回收,但是操作系统仍然会保存一些信息等待父进程通过调用wait()来获取一些信息(pid)。当子进程已经终止,但父进程在忙并没有调用wait()时,我们称这样的子进程为僵尸进程,因为前述信息仍然在占据进程表中的一项,如果表满了就不能创建新的进程

当子进程没有结束但是父进程在没有调用wait()的情况下终止了,父进程就结束了,子进程就会成为孤儿进程,Linux的做法是让init进程收养它们,即init进程成为其父进程并定期调用wait进行释放

创建守护进程(在后台长期运行)的方法就是fork两次,kill child,让grandchild进行执行这一grandchild就会称为孤儿进程被init收养

进程间通信

举例:两个电脑之间的QQ通信

主要方式:共享内存和消息传递

  • img

进程间通信的方式:

  • 信号量:操作系统的一种变量,是由操作系统来控制的不同进程可以访问的一个变量;可以通过sem_open()系统调用来建立和维护进程间的信号量;这样的信号量属于OS资源、它会在相关进程结束后由OS释放(传递的信息很少,只是一个变量而已)
  • 共享内存:每一个进程都会有一个虚拟页表,每个虚拟页表会映射到物理的页上;有两个虚拟内存,映射到同一个物理地址指针上(冲突,可能会同时写同一个地址空间)

  • 共享文件(很慢)

  • 管道:半双工

  • 消息队列:比较高级的手段,维护一堆链表,写东西就是往链表头写,操作系统去读

  • Socket,TCP/UDP

Linux内的操作

ps:显示静态进程

ps aux

a————列出系统当前所有进程
u————使用以用户格式为主的方式输出
x————该用户在终端下的所有进程

STAT——当前进程所处的状态(不同字符代表不同的状态:S表示可中断的休眠进程;s表示父进程;<表示优先级高的进程;R代表正在运行的进程;l代表多线性进程;N代表优先级低;Z代表僵尸进程;D代表不可中断的休眠进程;+代表的是前台进程)

top:显示动态进程

每三秒刷新一次

pgrep:查询进程PID

kill:杀死某个进程

killall:杀死含有关键字的所有进程

pkill:杀死指定用户/终端下的所有进程

参考链接:
https://www.yuque.com/xianyuxuan/coding/operating_systems
https://www.bilibili.com/video/BV1JW4y1j775/?spm_id_from=333.1007.top_right_bar_window_history.content.click

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

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

相关文章

内网渗透中最常见的十种漏洞分析总结

【环境搭建资料、工具包、全套视频…等籽料】私信聆取 以下信息是根据2020年和2019年为全球各种中型组织和企业完成的60多个渗透测试报告汇总而来的,在跳转到列表之前,让我们简要介绍一下全面的测试方法。 一、测试方法 目的是使用白盒(灰盒)方法在现场…

spirngboot项目.mvn/wrapper/maven-wrapper.properties‘ does not exist.

rm -rf ~ 命令后,项目出现一些问题,如下 执行命令: ./mvnw clean package -am -pl bistoury-dist -P$PROFILR -Dmaven.test.skip -Denforcer.skiptrue 报异常: starting to build bistoury agent Exception in thread "ma…

[附源码]java毕业设计同德佳苑物业管理系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

SpringBoot数据层解决方案/ 内置持久化解决方案JdbcTemplate使用/内置数据库H2使用以及RedisNoSql使用

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4 数据层解决方案 3.4.1 使用项目 新建空项目&a…

redis的事务

Redis的事务:一次事务操作,改成功的成功,该失败的失败。 提交事务 如果遇见错误 成功的成功,失败的失败,不会回滚 先开启事务,执行一些列的命令,但是命令不会立即执行,会被放在一…

web分享会

文章目录前言平台1. 在线练习平台2. 自己搭建靶场3. CTF真题平台分享前言 个人的学习过程仅供参考。 个人情况 我是大二进的工作室,算是比较晚的了,工作室的师兄人也很好,我有问题也会去找他们。我是一位女生,非常欢迎师妹们加入&…

从购买云服务器开始到成功部署网站并且可以正常外网访问整个体系流程(从0到1的过程)

准备工作: 购买云服务器(阿里云或腾讯云都行),过程一样。购买域名,并做解析处理,通过域名访问网站(后面需要自行备案)。 云服务器一些基本配置处理: 用密码登录方式登录root用户到云服务器上 登录成功后&#xff0c…

MHDNet

发现一种性能更优的目标检测网络,不同的输入分辨率下,目标分布和检测头之间存在不同的匹配关系。基于这些有指导意义的发现,作者提出了一种基于检测头和目标分布之间匹配的轻量化交通目标检测网络,称为MHDNet。该模型在BDD100K数据…

【k8s】3、kubeadm安装k8s集群

文章目录一、环境部署1、关闭防火墙规则、关闭selinux、关闭swap交换分区2、修改主机名、DNS解析3、调整内核参数二、所有节点安装Docker三、安装k8s集群1、所有节点配置K8S源2、所有节点安装kubeadm、kubelet和kubectl3、部署K8S集群3.1 初始化操作(master节点操作…

【虚幻引擎UE】UE4/UE5 环境构建插件推荐及使用介绍

一、Ultra Dynamic Sky(天气插件) 支持天气和昼夜变换,包含音效,可以预设也可以动态切换。内置照明解决方案,太阳、月亮和天空照明均与天空同步,并随时间变化。 天气包含:晴天、2D晴天、雨天、…

进程的通信 - 命名管道

命名管道概述 命名管道(Named Pipes),顾名思义,一个有名字的管道。命名管道的名字主要是用于确保多个进程访问同一个对象。命名管道不仅可以在同一台计算机之间传输数据,甚至能在跨越一个网络的不同计算机的不同进程之…

Zbrush 导出置换 然后导入vray 在 3ds max 和 maya 设置

注:方法很多,这个只是个人学习总结,如果不合适,可另外学习其他方法! 第一步: Zbrush 导出置换和法线设置: 第二步: 3Ds max 设置方式建议用exr格式(由于导出的时候…

科目一过关技巧

口诀 3让6违——题目中看到“6分”选“违”字;看到“违”字选6分(“违”法停车的违字除外,选9分);看到“让”就3分红高蓝低——红色圈圈最高,蓝色最低虚可实禁——车辆可以压虚线,不能压实线&a…

Windows11 配置Cuda cuDNN Pytorch环境

文章目录1 安装CudaNote 安装失败的情况2 安装cuDNN3 安装Anaconda4 安装Pytorch5 使用Pycharm进行验证6 结束1 安装Cuda 进入 developer cuda: https://developer.nvidia.com/ 之后自定义路径进行安装即可 必装CUDA,其他情况自己选择 自定义路径 Document与Deve…

Python表白比心

本文介绍运用Python中的turtle库控制函数画比心图。    文章目录一、效果展示二、代码详解1 导入库2 播放音乐3 画手4 定义画心的函数5 定义写名字的函数并实现动态画心一、效果展示 在介绍代码之前,先来看下本文的实现效果。 可以参考Pinstaller(Python打包为exe…

[附源码]java毕业设计网上手机商城的设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

JS,DOM试题2,在实践中应用,非常详细!!

列表收缩 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>ul,li{list-style: none;padding: 0;margin: 0;}ul{display: none;}h3{margin: 0;background: cornflowerblue;}div{text-indent: 20…

基于FFmpeg的Java视频Mp4转GIF初探

背景 在一些业务场景中&#xff0c;会有如下的一些要求&#xff1a;比如有用户需要将Mp4视频转为Gif动图。当然有一些小伙伴说可以使用系统截图&#xff0c;然后使用之前提到过的技术&#xff1a;GIF图像动态生成-JAVA后台生成。需要处理的素材比较少&#xff0c;就一两个视频&…

最全Python操作excel代码,让你每天早下班两小时

在数字化时代&#xff0c;很多人工作中经常和excel打交道。本文介绍Python操作excel的脚本&#xff0c;让你工作效率更高。    文章目录一、安装openpyxl模块二、加载库三、创建文件和工作表四、在工作表指定单元格写数据五、设置单元格的颜色字体六、在excel中写入表格一、安…

【数据结构初阶】C语言从0到1带你了解直接插入排序

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【数据结构初阶】 ✒️✒️本篇内容&#xff1a;深入剖析直接插入排序 &#x1f6a2;&#x1f6a2;作者简介&#xff1a;计算机海洋的新进船长一枚&#xf…