当前位置: 首页 > news >正文

[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函数来创建子进程,一般通过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的进程管理,也就是系统。

#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

相关文章:

[Linux] 进程入门

&#x1f4bb;文章目录 &#x1f4c4;前言计算机的结构体系与概念冯诺依曼体系结构操作系统概念目的与定位 进程概念描述进程-PCBtask_struct检查进程利用fork创建子进程 进程状态进程状态查看僵尸进程孤儿进程 &#x1f4d3;总结 &#x1f4c4;前言 作为一名程序员&#xff0c…...

深入解析数据结构与算法之堆

文章目录 &#x1f966;引言&#xff1a;&#x1f966;什么是堆&#x1f966;大顶堆与小顶堆&#x1f9c4;大顶堆&#xff08;Max Heap&#xff09;&#x1f9c4;小顶堆&#xff08;Min Heap&#xff09; &#x1f966;堆的表示&#x1f9c4;数组表示&#xff1a;&#x1f9c4;…...

信息化项目质量保证措施

...

es的优势

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…...

sonar对webgoat进行静态扫描

安装sonar并配置 docker安装sonarqube&#xff0c;sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…...

opencv-重点知识

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;提供了大量用于图像处理和计算机视觉任务的工具和算法。以下是一些OpenCV中的重点知识&#xff1a; 图像加载与显示: 使用cv2.imread()加载图像。使用cv2.imshow()显示…...

上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹&#xff0c;黄白二线有所分化&#xff0c;题材热点轮动表现。北证50指数大涨超3%&#…...

2.4G无线收发芯片 XL2400P使用手册

XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射 频收发机、频率收生器、晶体振荡器、调制解调器等功能模块&#xff0c;并且支持一对多组网和带 ACK 的通信模 式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外…...

ZC序列理论学习及仿真

文章目录 前言一、ZC 序列理论1、基本概念2、表达式3、ZC 序列一些定义①、自相关②、循环移位③、循环自相关④、循环互相关二、ZC 序列性质1、性质 1:恒包络,即等模2、性质 2:零循环自相关3、性质 3:固定循环互相关4、其他性质①、傅里叶变换后仍是 ZC 序列②、低峰均比③…...

利用OpenCV实现图片中导线的识别

下面是一个需求&#xff0c;识别图片中的导线&#xff0c;要在图像中检测导线&#xff0c;我们需要采用不同于直线检测的方法。由于OpenCV没有直接的曲线检测函数&#xff0c;如同它对直线提供的HoughLines或HoughLinesP&#xff0c;检测曲线通常需要更多的图像处理步骤和算法&…...

关于VITS和微软语音合成的效果展示(仙王的日常生活第1-2209章)

目录 说明微软VITS 合成效果展示 说明 自己尝试了VITS和微软这两个语音合成功能。甚至使用了微软的效果来训练VITS&#xff0c;出乎意料&#xff0c;效果居然不错&#xff0c;没有大佐的口音。 微软 微软中最好听的&#xff0c;感情最顺滑的&#xff0c;应该是“云希”莫属。…...

普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会

Hi~ 你有一份邀约请查收 11月22日—26日绵阳科博会 普乐蛙展位号&#xff1a;B馆科技体验区(1) 邀你体验趣味VR科普&#xff0c;探索科技新发展 第十一届中国(绵阳)科技城国际科技博览会 绵阳科博会自2013年创办以来&#xff0c;已连续成功举办十届&#xff0c;已有近7000家单位…...

行情分析——加密货币市场大盘走势(11.22)

大饼昨日晚上打了止损&#xff0c;笔者入场了空单&#xff0c;目前来看上涨乏力&#xff0c;下跌是必然的&#xff0c;昨日的下跌跌破了蓝色上涨趋势线&#xff0c;而今日白天开始反弹&#xff0c;别着急抄底&#xff0c;下跌还没有结束。 空单策略&#xff1a;入场36500 止盈…...

QT--MP3项目数据库数据表设计与实现_歌曲搜索

QSqlQuery类&#xff1a;...

gzip 压缩优化大 XML 响应的处理方法

当处理大型XML响应时&#xff0c;我们经常会面临内存限制和性能问题。 在处理这个问题时&#xff0c;我们可以使用Python的requests库和lxml库来解决。下面是解决方案的步骤&#xff1a; 1. 使用requests库发送HTTP请求获取XML响应。 2. 检查响应的Content-Encoding标头&…...

数字化文旅系统,让景区营销变得更加简单!

随着互联网的普及和信息技术的不断发展&#xff0c;越来越多的消费者开始通过互联网来获取旅游信息、预订旅游产品和服务。因此&#xff0c;文旅行业需要紧跟时代步伐&#xff0c;借助数字化技术来提高服务质量和效率&#xff0c;满足消费者对于便捷、个性化的需求。 1. 强大功…...

配置命令别名

vim ~/.bashrc 配置命令别名 alias knkubectl -n alias kkubectl 配置golang环境变量 export GOPATH/root/go export GO111MODULEon export GOPROXY"http://mirros.yun.ali.com.cn:8848/goproxy" export GOROOT/usr/local/go export PATH$PATH:$GOPATH/bi…...

zookeeper应用之分布式队列

队列这种数据结构都不陌生&#xff0c;特点就是先进先出。有很多常用的消息中间件可以有现成的该部分功能&#xff0c;这里使用zookeeper基于发布订阅模式来实现分布式队列。对应的会有一个生产者和一个消费者。 这里理论上还是使用顺序节点。生产者不断产生新的顺序子节点&am…...

取数游戏2(动态规划java)

取数游戏2 题目描述 给定两个长度为n的整数列A和B&#xff0c;每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax&#xff0c;则第i次取走的数的价值vibi⋅ax&#xff0c;现在希望你求出∑vi的最大值。 输入格式 第一行一个数T &#xff0c;表示有T 组数据。…...

Spring Boot中配置文件生效位置

1. 配置文件位置 首先小伙伴们要明白&#xff0c;Spring Boot 默认加载的配置文件是 application.properties 或者 application.yaml&#xff0c;properties优先级高于yaml。默认的加载位置一共有五个&#xff0c;五个位置可以分为两类&#xff1a; 从 classpath 下加载&…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...