【Linux初阶】进程的相关概念 | 进程管理 查看进程 获取进程标识符 fork进程创建

 🌟hello,各位读者大大们你们好呀🌟

🍭🍭系列专栏:【Linux初阶】

✒️✒️本篇内容:进程的概念,进程管理初识(描述、管理进程),查看进程的基础方法,获取进程标识符(pid、ppid),fork进程创建(分流应用)

🚢🚢作者简介:计算机海洋的新进船长一枚,请多多指教( •̀֊•́ ) ̖́-

目录

一、什么是进程

二、进程的管理

1.描述进程-PCB

2.程序控制块(PCB)的管理 

三、查看进程

四、通过系统调用获取进程标示符

1.进程和父进程

2.清除进程

五、进程创建 - fork

1.一般进程创建

2.通过系统调用创建进程-fork初识

3. fork的分流应用


一、什么是进程

进程的概念,有很多种不同的说法,我们看的最多的说法之一就是:一个运行起来的(加载到内存) 的程序,被称为进程。进程和程序相比,具有动态属性。

实际上,进程 = 内核数据结构(task_struct)+  进程对应的磁盘代码


二、进程的管理

首先,我们要清楚一个前提——程序是一个文件,它存储在磁盘中。其次,我们要知道,要执行一个程序需要把程序加载到内存中

接下来我们还需要了解一些相关的基础知识,来将进程的知识串联起来。

1.描述进程-PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
  • 课本上称之为PCB(process control block,中文名为程序控制块),Linux操作系统下的PCB是: struct task_struct
  • PCB对象是操作系统创建的

我们可以把PCB理解为一种struct结构体或类,专门用于存储加载到内存的各个程序的属性,比如程序的状态、运行的优先级等。

 

2.程序控制块(PCB)的管理 

通过上面的知识,我们知道了内存中有从磁盘加载进来的程序块,每个程序块有对应的PCB,那么问题来了,计算机是如何对加载到内存中的程序进行管理的呢?我们通过下面的图示来理解  

  • “管理”的执行本质:先描述,再组织;
  • 描述:PCB(struct task_struct),对程序信息进行了描述;
  • 组织:操作系统通过特定的数据结构,将不同的PCB(程序控制块)及其对应的程序组织(加载到内存的程序块)联系起来,最终实现对程序的管理。

进程 = 内核数据结构(PCB)+  进程对应的磁盘代码。操作系统可以通过PCB找到对应的磁盘代码,因此,只要我们实现了对PCB的管理,也就相当于实现了进程的管理

进程组织:所有运行在系统里的进程都以task_struct链表的形式存在内核里。我们可以在内核源代码里找到它。

内存中PCB和程序块的组织形式如下图所示


三、查看进程

在Linux中查看进程的操作,实际上和我们再window上查看任务管理器是差不多的。

ps axj | head -1 && ps axj | grep ‘myproc’  或
ps axj | head -1 && ps axj | grep 4974(进程id)
  • ps axj - 查看系统所有进程;
  • head -1(数字1) - 打印标题;
  • grep ‘myproc’ - 对除文件myproc外进行行过滤。

  进程在被调度运行的时候,进程就具有动态属性


四、通过系统调用获取进程标示符

1.进程和父进程

  • 进程id(PID)
  • 父进程id(PPID)

gerpid() - 获取当前进程的id(PID)

getppid() -  获取当前进程的父进程的id(PPID)

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
     printf("pid: %d\n", getpid());
     printf("ppid: %d\n", getppid());
     return 0;
}

2.清除进程

kill -9 4974(进程id)    #kill -9 表示强制终止退出


五、进程创建 - fork

1.一般进程创建

实际上,我们运行的一个可执行程序,就是一个进程

命令行上启动的进程,在无特殊情况下,它的父进程都是bash。(bash为进程名,它是一个命令行解释器)

通常进程运行都是在子进程下运行,子进程和父进程相互独立但是又数据共享。目的是保护计算机安全(防止进程对系统进行危险操作)。

当程序单线程运行时,进程在子进程下运行。多次运行同一运行程序,子进程id改变,父进程id不变,说明每次运行该程序的子进程变了,但是每个子进程对应的父进程不变。

2.通过系统调用创建进程-fork初识

  • 运行 man fork 认识fork(除了起始页,还可通过底部命令行指令:/return val查看返回值);
  • fork有两个返回值(如果成功,子进程的pid返回父进程,0返回给子进程;如果失败,返回-1);
  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)。

接下来我们看下面这段代码 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    //创建子进程 -- fork是一个函数 -- 函数执行前:只有一个父进程 -- 函数执行后:父进程+子进程
     fork();
     printf("我是一个进程,pid:%d, ppid: %d\n", getpid(), getppid());

     sleep(2);
     return 0;
}

3. fork的分流应用

 通过文档我们了解到,fork 之后通常要用 if 进行分流【通过返回值不同实现分流】

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
     pid_t id = fork();
     if(id < 0)
    {
         perror("fork");
         return 1;
     }
     else if(id == 0)
     { 
        //child
        printf("I am child : %d!, id: %d\n", getpid(), id);
     }
     else
     { 
        //father
        printf("I am father : %d!, id: %d\n", getpid(), id);
     }

     sleep(1);
     return 0;
 }

 结果是,父进程和子进程将会同时运行,因此我们可以得出结论

  • fork() 之后,会有父进程+子进程两个进程执行后续代码(拥有多个线程,多个执行流,这就是我们所说的多线程
  • fork后续的代码,被父子进程共享(注意:共享不代表需要一个进程执行所有代码)
  • 通过返回值不同,可以让父子进程各自执行后续共享代码的一部分

 

 通过对进程和合理化利用,就可以多进程/多线程运行程序,实现并发式编程!!!


 🌹🌹 Linux进程的相关概念大概就讲到这里啦,博主后续会继续更新更多Linux操作系统的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪 

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

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

相关文章

K_A33_001 基于STM32等单片机驱动RC522射频卡 读写IC卡 串口显示

K_A33_001 基于STM32等单片机驱动RC522射频卡 读写IC卡 串口显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序:对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCRC522射频模块1.2、STM32F103C8T6RC522射频模块 五、基础知识学习与相关资料下…

使用chatgpt实现微信聊天小程序(秒回复),github开源(附带链接)

文章目录 前言效果展示原理说明服务器端代码说明微信小程序代码说明代码链接总结 前言 我在前一段时间突发奇想&#xff0c;就使用java来调用chatgpt的接口&#xff0c;然后写了一个简单小程序&#xff0c;也上了热榜第一&#xff0c;java调用chatgpt接口&#xff0c;实现专属…

nodejs+vue 智能餐厅菜品厨位分配管理系统

系统功能主要介绍以下几点&#xff1a; 本智能餐厅管理系统主要包括三大功能模块&#xff0c;即用户功能模块和管理员功能模块、厨房功能模块。 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员功能来…

基于matlab使用 CSI-RS 的 NR 下行链路发射端波束细化

一、前言 此示例演示了使用 5G 工具箱中的信道状态信息参考信号 &#xff08;CSI-RS&#xff09; 的下行链路发射端波束细化过程。该示例展示了如何在散射环境中向不同方向传输多个CSI-RS资源&#xff0c;以及如何根据参考信号接收功率&#xff08;RSRP&#xff09;测量结果选择…

编写高质量代码:改善Java程序的151个建议(数组和集合)

集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序&#xff0c;compareTo方法是Comparable接口要求必须实现的&#xff0c;它与equals方法有关系吗?有关系&#xff0c;在compareTo的返回为0时&#xff0c;它表示的是 进行比较的两个元素时相等…

某医院网络安全分析案例

背景 我们已将NetInside流量分析系统部署到某市医院的机房内&#xff0c;使用流量分析系统提供实时和历史原始流量。本次分析重点针对网络流量安全进行分析&#xff0c;以供安全取证、网络质量监测以及深层网络分析。 分析时间 报告分析时间范围为&#xff1a;2023-04-12 16…

Cloud Kernel SIG月度动态:发布 Anolis 8.8 镜像、kABI 社区共建流程

Cloud Kernel SIG&#xff08;Special Interest Group&#xff09;&#xff1a;支撑龙蜥内核版本的研发、发布和服务&#xff0c;提供生产可用的高性价比内核产品。 01 SIG 整体进展 Anolis 8.8 镜像发布&#xff0c;默认搭载 ANCK 5.10-013 版本。 Anolis 23 滚动内核更新至…

ai智能文章生成器-ai论文写作

在数字时代&#xff0c;营销推广策略已经向数字化方向发展。今天我们要介绍的是一款名为“智能ai写作免费”的软件&#xff0c;它可以让营销人员轻松地创作新的内容&#xff0c;并且其中不需要过多的技术知识或文学背景。这款软件可以为许多企业和机构带来创造性的帮助。 智能A…

@Async异步线程:Spring 自带的异步解决方案

前言 在项目应用中&#xff0c;使用MQ异步调用来实现系统性能优化&#xff0c;完成服务间数据同步是常用的技术手段。如果是在同一台服务器内部&#xff0c;不涉及到分布式系统&#xff0c;单纯的想实现部分业务的异步执行&#xff0c;这里介绍一个更简单的异步方法调用。 对于…

电脑端(PC)按键精灵——5.找色/找图命令

电脑端(PC)按键精灵——5.找色/找图命令 注&#xff1a;说了键盘、鼠标、其他、控制命令还有安装内容&#xff0c;现在说下颜色/图形命令&#xff0c;这一节相当重要 按键精灵小白入门详细教程&#xff1a; 电脑端(PC)按键精灵—小白入门 详细教程 命令介绍 1.GetPixelCol…

【C++类】

目录 前言一、类的定义二、类的访问限定符及封装2.1访问限定符2.2封装 三、类的大小3.1为什么需要内存对齐3.2为什么成员函数不占用类的内存&#xff1f;3.3为什么空类的大小是1个字节&#xff1f; 四、this指针4.1this指针的引入4.2this指针的特性 五、类的6个默认成员函数5.1…

飞书接入ChatGPT - 将ChatGPT集成到飞书机器人,直接拉满效率 【飞书ChatGPT机器人】

文章目录 前言环境列表视频教程1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中,使…

6.4 一阶方程组与高阶方程的数值解法

学习目标&#xff1a; 学习一阶方程组与高阶方程的数值解法的目标可以分为以下几个方面&#xff1a; 掌握一阶方程组和高阶方程的基本概念和求解方法&#xff1b;理解数值解法的概念和原理&#xff0c;了解常见的数值解法&#xff1b;掌握欧拉方法、改进欧拉方法和龙格-库塔方…

深入探讨Linux驱动开发:Linux设备树

文章目录 一、设备树介绍二、设备树框架1.设备树框架2.节点基本格式3.节点部分属性简介 总结 一、设备树介绍 设备树&#xff08;Device Tree&#xff0c;简称 DT&#xff09;是一种在嵌入式系统中描述硬件设备的一种数据结构和编程语言。它用于将硬件设备的配置信息以树形结构…

Springboot 中快速完成文件上传,整合多平台神器

哈喽&#xff0c;大家好~ 又是做好人好事的一天&#xff0c;有个小可爱私下问我有没有好用的springboot文件上传工具&#xff0c;这不巧了嘛&#xff0c;正好我私藏了一个好东西&#xff0c;顺便给小伙伴们也分享一下&#xff0c;demo地址放在文末了。 文件上传在平常不过的一…

最新,有8本SCIE期刊被剔除,4月SCIESSCI期刊目录更新(附最新目录下载)

2023年4月18日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次3月WOS期刊目录更新大变动之后&#xff0c;此次4月更新又有8本SCIE期刊发生变动&#xff0c;其中有4本期刊被剔出SCIE数据库&#xff0c;4本期刊更改了名称和ISSN号。更新后的最新SCIE期刊目录共有9505本…

Flask 与 Django 先学哪个呢

本文把 Flask 和 Django 做一个比对&#xff0c;因为我对这两个 Python Web 框架都有实际的开发经验。希望我可以帮助您选择学习哪个框架&#xff0c;因为学习一个框架可能会非常耗时 —— 当然也很有趣&#xff01; 相似之处 让我们从相似之处开始。 No. 1 Flask 和 Djang…

【ctfshow】命令执行->web29-web44

前言 半夜网抑云听歌听emo了 z 刷会儿题不然睡不着了呜呜呜 红中(hong_zh0) CSDN内容合伙人、2023年新星计划web安全方向导师、 华为MindSpore截至目前最年轻的优秀开发者、IK&N战队队长、 吉林师范大学网安大一的一名普通学生、搞网安论文拿了回大挑校二、 阿里云专家博…

数据结构复习题(包含答案)

第一章 概论 一、选择题 1、研究数据结构就是研究&#xff08; D &#xff09;。 A. 数据的逻辑结构 B. 数据的存储结构 C. 数据的逻辑结构和存储结构 D. 数据的逻辑结构、存储结构及其基本操作 2、算法分析的两个主要方面是&#xff08; A …

【小技巧】word文档编辑技巧(一)

文章目录 一、显示显示导航显示所有字符 二、格式格式-三级目录格式-文本格式-图格式-表格式-公式格式-参考文献 三、小技巧交叉引用连续交叉引用表/图目录等自动更新分节符设置页眉/页码word转pdf带导航 一、显示 显示导航 开启导航&#xff1a;视图->显示框->导航窗格…
最新文章