[Linux] 进程入门

在这里插入图片描述

💻文章目录

  • 📄前言
  • 计算机的结构体系与概念
    • 冯诺依曼体系结构
    • 操作系统
      • 概念
      • 目的与定位
  • 进程
    • 概念
    • 描述进程-PCB
    • task_struct
    • 检查进程
    • 利用fork创建子进程
  • 进程状态
    • 进程状态查看
    • 僵尸进程
    • 孤儿进程
  • 📓总结


📄前言

作为一名程序员,我们天天都在与代码打交道,但你是否有了解过我们的程序是如何在操作系统中运行与调度的呢?如果你对进程与计算机不甚了解,那么本文将带领你走向操作系统进程的第一步。

计算机的结构体系与概念

在了解进程的相关知识前,我们需要先了解以下计算机的组成体系及其概念。

冯诺依曼体系结构

冯诺依曼体系结构是一种计算机的组成方案,因为使用其体系构造的计算机性价比很高,所以我们日常生活中使用的计算机,如笔记本、服务器等大部分都遵守着冯诺依曼体系结构。

冯诺依曼体系结构规定了计算机由五个部分组成,控制器、运算器、储存器、输入设备、输出设备。

在这里插入图片描述
注意:

  • 这里的储存器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或射出设备)要输入或输出数据,只能写入内存或从内存中读取
  • 总的来说,所有设备都只能直接和内存打交道

操作系统

概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),笼统的理解,操作系统包含:

  • 内核(进程管理、内存管理、文件管理、驱动管理)
  • 其他程序(函数库、shell程序等)

目的与定位

操作系统是纯正用于管理的软件,操作系统与硬件交互,管理所有的软硬件资源。

在这里插入图片描述

进程

概念

如果你没有学习过系统知识,可能会以为进程就是把二进制程序拷贝执行而已,但其实进程指的是PCB(process control block)+ 可执行程序

描述进程-PCB

PCB又名进程控制块,这是一个进程属性的集合体,用于描述进程,在linux内核是一种链式结构(task_struct),它会被装载到内存中。

task_struct

在Linux里面描述进程的结构体就叫做task_struct,其内容分为:

  • 标志符:描述本进程的唯一标识符,用于区别其他进程 。
  • 状态:任务装提、退出代码、退出信号等 。
  • 优先级:相对于其他进程的优先级。
  • 程序计数器:程序中即将被执行的下一条指令的地址。
  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
  • 上下文数据:进程执行时处理器的寄存器中的数据「Ip指针」
  • I / O状态信息:包括显示的I / O 请求,分配给进程的 I / O设备和被进程使用的文件列表。
  • 记账信息:可能包括处理器总和,使用的时钟数总和,时间限制,记帐号等。
  • 其他信息。

检查进程

进程的信息可以通过linux目录中的/proc文件夹来查看
在这里插入图片描述
或者你也可以用top / ps 等指令工具来获取

利用fork创建子进程

在Linux平台下,C语言可以用fork函数来创建子进程,父子进程代码共享,当数据使用写实拷贝,当数据没被修改时,数据共用。

#include <stdli.h>
#include <sys/types.h>
#include <unistd.h>int main() {//fork如果创建子进程成功则返回0,失败返回-1。pid_t id = fork();	if(id == 0){printf("我是子进程\n");}else{printf("我是父进程\n");}return 0;
}

进程状态

在Linux中进程拥有多种状态,一个进程可以有多个状态。让我们来看看Linux内核里面对进程状态的定义吧。

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
  • R 运行状态:说明进程要么在运行,要么在运行队列里。
  • S 睡眠状态:说明进程在等待事件完成。
  • D 磁盘休眠状态:又名不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
  • T 停止状态:通过发送 SIGSTOP 信号来给进程停止,这个被停止的进程可以通过发送 SIGCONT 信号让进程继续运行。
  • X 死亡状态:这个状态只是一个返回状态,你不会在任务列表看到这个状态。

进程状态查看

我们可以通过top指令或ps指令来检查进程
在这里插入图片描述

僵尸进程

僵尸进程是一种比较特殊的状态,当子进程退出,而父进程没有读取到子进程的返回码时就会产生僵尸进程。因为僵尸进程还没被系统清理其开辟的空间,所以僵尸进程还会导致内存泄漏。

C语言创建僵尸进程:

#include <stdio.h>
#include <stdlib.h>int main()
{pid_t id = fork();if(!id){	//C语言可以通过getpid指令来获取进程的idprintf("child[%d] is return....\n", getpid());sleep(2);exit(EXIT_SUCCESS);}else {printf("parent[%d] is sleeping...\n",getpid());sleep(10);}return 0;
}

在这里插入图片描述

孤儿进程

孤儿进程和僵尸进程恰好相反,如果父进程先退出,子进程继续运行,那么子进程就会成为孤儿进程。成为孤儿进程后,就被交给pid为1的进程管理,也就是系统。

来段代码:
进程优先级
基本概念
cpu资源分配的先后顺序,就是指进程的优先权(priority)。
优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整
体性能。
查看系统进程
在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main()
{pid_t id = fork();int i = 0;if (id == 0){	//childwhile(i++ < 10){printf("[%d] : child_pid[%d] : parent_pid[%d]\n", getpid(), getppid());sleep(1);}	}else{	//parentprintf("parent[%d], is exit\n", getpid());exit(0);}return 0;
}

在这里插入图片描述

📓总结

📜博客主页:主页
📫我的专栏:C++
📱我的github:github

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

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

相关文章

同为科技(TOWE)桌面PDU插排:一款可以DIY定制的“超级插座”

当今社会&#xff0c;各种电子产品和家用电器已成为人们日常生活中不可或缺的一部分&#xff0c;在带给人们便利的同时&#xff0c;也使得电力使用变得更加频繁和重要。然而&#xff0c;当前市面上很多普通插座由于功能单一、材质粗劣、插口数量受限、充电速度过慢、插头间互相…

【shell】 1、bash语法超详细介绍

文章目录 修改前缀路径dirname set常用函数参数变量local 返回值正则打印第 n 行获取行号核对数据库各表数量jq查询检查日志 sshpassexpect数组xargs bash manual 修改前缀 参考 export PS1"bash> "路径 dirname strip last component from file name dir$(…

CMap数据库筛选化学药物

数据库clue.io 文献链接&#xff1a;连接图谱&#xff1a;使用基因表达特征连接小分子、基因和疾病 |科学 (science.org) 基本模式&#xff1a;利用CMap将差异基因列表与数据库参考数据集比对&#xff1b;根据差异表达基因在参考基因表达谱富集情况得到一个相关性分数&#…

新加坡服务器托管-金融企业的选择

新加坡作为一个亚洲金融中心&#xff0c;其优越的地理位置和先进的信息通信技术基础设施&#xff0c;使得其成为了众多金融机构企业选择服务器机房托管的理想地点。金融行业对于服务器的安全性和可靠性要求很高&#xff0c;而将服务器托管在新加坡有许多好处。 首先&#xff0c…

复杂类型,查询--学习笔记

1&#xff0c;复杂类型 解决问题&#xff1a;一些不容易获取到的数据&#xff0c;例如数组类型&#xff0c;集合类型等&#xff0c;获取他们的数据 -- 1.创建表 create table tb_array_person(name string,city_array array<string> )row format delimited fields term…

HarmonyOS ArkTSTabs组件的使用(六)

Tabs组件的使用 ArkUI开发框架提供了一种页签容器组件Tabs&#xff0c;开发者通过Tabs组件可以很容易的实现内容视图的切换。页签容器Tabs的形式多种多样&#xff0c;不同的页面设计页签不一样&#xff0c;可以把页签设置在底部、顶部或者侧边。 Tabs组件的简单使用 Tabs组件…

网络参考模型与标准协议(二)-TCP/IP对等模型详细介绍

应用层 应用层为应用软件提供接口&#xff0c;使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议&#xff0c;以及传输层所使用的端口等。TCP/IP每一层都让数据得以通过网络进行传输&#xff0c;这些层之间使用PDU ( Paket Data Unit,协议数据单元)彼此交换信…

局域网文件共享神器:Landrop

文章目录 前言解决方案Landrop软件界面手机打开效果 软件操作 前言 平常为了方便传文件&#xff0c;我们都是使用微信或者QQ等聊天软件&#xff0c;互传文件。这样传输有两个问题&#xff1a; 必须登录微信或者QQ聊天软件。手机传电脑还有网页版微信&#xff0c;电脑传手机比…

gitlab 实战

一.安装依赖 yum install -y curl policycoreutils-python openssh-server perl 二.安装gitlab yum install gitlab-jh-16.0.3-jh.0.el7.x86_64.rpm 三.修改下面的 vim /etc/gitlab/gitlab.rbexternal_url http://192.168.249.156 四.初始化 gitlab-ctl reconfigure 五.查看状…

OpenStack-train版安装之环境准备

环境准备 环境介绍VMware配置WMware虚拟机最低配置WMware添加网卡WMware添加硬盘 基础环境安装修改各节点的主机名修改各节点的hosts文件修改各节点的内核参数关闭各节点的防火墙和selinux安装NPT&#xff08;时间同步&#xff09;安装OpenStack基础服务包 CentOS升级内核 环境…

C++ Qt 学习(九):模型视图代理

1. Qt 模型视图代理 Qt 模型视图代理&#xff0c;也可以称为 MVD 模式 模型(model)、视图(view)、代理(delegate)主要用来显示编辑数据 1.1 模型 模型 (Model) 是视图与原始数据之间的接口 原始数据可以是&#xff1a;数据库的一个数据表、内存中的一个 StringList&#xff…

集合的自反关系和对称关系

集合的自反关系和对称关系 一&#xff1a;集合的自反关系1&#xff1a;原理&#xff1a;2&#xff1a;代码实现 二&#xff1a;对称关系1&#xff1a;原理&#xff1a;2&#xff1a;代码实现 三&#xff1a;总结 一&#xff1a;集合的自反关系 1&#xff1a;原理&#xff1a; …

简单但好用:4种Selenium截图方法了解一下!

前言 我们执行UI自动化操作时&#xff0c;大多数时间都是不在现场的&#xff0c;出现错误时&#xff0c;没有办法第一时间查看到&#xff0c;这时我们可以通过截图当时出错的场景保存下来&#xff0c;后面进行查看报错的原因&#xff0c;Selenium中提供了几种截图的方法&#x…

OpenAI 董事会与 Sam Altman 讨论重返 CEO 岗位事宜

The Verge 援引多位知情人士消息称&#xff0c;OpenAI 董事会正在与 Sam Altman 讨论他重新担任首席执行官的可能性。 有一位知情人士表示&#xff0c;Altman 对于回归公司一事的态度暧昧&#xff0c;尤其是在他没有任何提前通知的情况下被解雇后。他希望对公司的治理模式进行重…

hisi芯片常见专有名词总结SVP MPP NNIE ACL

1.SVP&#xff1a; Smart Vision Platform是海思媒体处理芯片智能视觉异构加速平台。该平台包含了 CPU、DSP、NNIE(Neural Network Inference Engine)等多个硬件处理单元和运行在这些 硬件上 SDK 开发环境&#xff0c;以及配套的工具链开发环境。 不同芯片下的 SVP 硬件资源…

趣学python编程(七、实现个小网站如此简单 web.py使用介绍)

这里先拿一个小网站的例子来举例&#xff0c;保持好奇心就可以了。因为兴趣才是最好的老师&#xff0c;它能激发人内在的行动力。这里介绍个使用web.py轻量级框架实现的一个小网站&#xff0c;可以看到实现个小网站并不难。python都能用来干什么&#xff1f;那么网站就是它众多…

武汉站--ChatGPT/GPT4科研技术应用与AI绘图及论文高效写作

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

执行npm的时候报权限问题的解决方案

我们在执行npm操作的过程中&#xff0c;会出现以下权限问题&#xff0c;解决方案: 管理员身份 运行cmd 切换目录到要执行命令的文件下 再进行npm操作即可

idea一键打包docker镜像并推送远程harbor仓库的方法(包含spotify和fabric8两种方法)--全网唯一正确,秒杀99%水文

我看了很多关于idea一键打包docker镜像并推送harbor仓库的文章&#xff0c;不论国内国外的&#xff0c;基本上99%都是瞎写的&#xff0c; 这些人不清楚打包插件原理&#xff0c;然后就是复制粘贴一大篇&#xff0c;写了一堆垃圾&#xff0c;然后别人拿来也不能用。 然后这篇文…

下厨房网站月度最佳栏目菜谱数据获取及分析PLus

目录 概要 源数据获取 写Python代码爬取数据 Scala介绍与数据处理 1.Sacla介绍 2.Scala数据处理流程 数据可视化 最终大屏效果 小结 概要 本文的主题是获取下厨房网站月度最佳栏目近十年数据&#xff0c;最终进行数据清洗、处理后生成所需的数据库表&#xff0c;最终进…