Linux基础4-进程1(操作系统,进程介绍,Linux进程相关命令,getpid,fork)

news2024/9/20 22:30:08

上篇文章:Linux基础3-基础工具4(git),冯诺依曼计算机体系结构-CSDN博客

本章重点:

1. 操作系统简介

2. 什么是进程?

3. 在Linux使用命令查看进程(ps)

4. getpid,getppid, fork简介

上一章我们了解了冯诺依曼计算机体系结构,我们需要知道数据是如何进行流动的

请解释:你从qq发送一条消息到你的朋友并被接收,数据是如何流动的(暂时不考虑网络层)

        我的键盘输入 --> 我的内存 --> 我的CPU处理 --> 我的内存 --> 我的网卡处理输出

--> 网络 --> 我朋友的网卡处理输入 --> 我朋友的内存 --> 我朋友的CPU处理 --> 我朋友的内存 --> 我朋友的显示器输出

目录

一. 操作系统

二. 进程介绍

三. Linux下查看进程,杀死进程

四. 查看进程pid和创建子进程

4.1 getpid getppid 查看进程的pid

4.2 fork创建子进程

五.下章重点 

5.1 进程状态


一. 操作系统

        根据冯诺依曼计算机体系结构,我们知道计算机由输入,输出设备,存储器,cpu等组成,计算机是如何对这些硬件和其他软件进行管理的?(如果不管理的话不就乱套了)

        操作系统是进行软硬件资源管理的软件.

为什么要对这些资源进行管理?

        (操作系统通过管理软硬件资源,给用户提供良好的,稳定的,安全的执行环境)

操作系统如何对这些软硬件资源进行管理?(先描述后组织)

        1. 使用struct_task进行描述进程,再使用链表等结构进行管理

        2. 操作系统通过对数据的管理来管理软硬件,创建进程来管理资源

计算机的软硬件结构如下

系统调用和库函数辨析

1. 在开发角度,操作系统作为一个整体,会暴露自己部分接口,供外部进行开发使用,这些接口被称为系统调用

2. 系统调用在使用上比较基础,而且使用的要求对用户高.所以部分开发者对系统调用进行适度封装,逐渐形成库,更方便开发者进行开发和二次开发

二. 进程介绍

什么是进程?

        进程就是运行起来(被加载到内存)的程序。

有很多加载到内存中的程序,操作系统如何管理它们呢?

        管理需要先组织,再管理。操作系统通过进程控制块(PCB)来对进程进行管理,PCB中含有很多进程的信息。

        在Linux中,PCB是task_struct

//PCB内核结构体(内核结构体可以创建内核对象,将这个结构和我们的代码数据关联起来)
//这样我们就能通过管理PCB进而管理进程
struct task_struct
{
    //该进程的所有属性
    //该进程对应的代码和属性地址
    struct task_struct* next;//如通过链表链接所有进程,方便对进程进行管理
};

这样就实现了:对进程管理 ----> 对PCB链表管理(增删查改等)

所以: 进程=内核数据结构+进程相应大端数据代码

且操作系统在调度进程的时候,进程具有动态属性

三. Linux下查看进程,杀死进程

以下是Linux下常用的查看进程的命令

ps axj                    //查看所有进程
ps axj | head -1          //查看进程各项属性的标题
ps axj | grep 进程名称    // 通过grep过滤出我们需要查找的进程
ps axj | grep head -1 && ps axj | grep 进程名称    //查看标题同时进程查找
kill -9 进程pid    //杀死这个pid的进程

举例:

1.

2.

3.

4.

另外一种查看进程的方式

在Linux下,一切皆文件。进程也不例外,在系统中,创建一个进程后,就有一个进程文件

使用 ls /proc 即可查看进程目录

四. 查看进程pid和创建子进程

4.1 getpid getppid 查看进程的pid

我们创建一个进程后,如何获取进程的pid??

#include <unistd.h>    //头文件
//这两个都是系统调用
getpid()    //获取进程的pid
getppid()   //获取进程父进程的pid
#include <stdio.h>
#include <unistd.h>

int main()
{
  while(1)
  {
    printf("我是一个进程 pid:%d 我父进程的pid:%d\n", getpid(), getppid());
    sleep(1);
  }
  return 0;
}

 运行结果:

4.2 fork创建子进程

fork()    
//用于创建子进程,
//创建失败返回负数,父进程返回子进程pid,子进程返回0

//fork之后,会有父进程,子进程两个进程执行后续代码
//fork后续的代码,被父子进程共享
//通过返回值不同,父子进程执行后续共享代码的一部分(个进程的执行是并发的)

举例:

该代码在创建子进程后,各自输出自己的pid和自己父亲的pid

#include <stdio.h>
#include <unistd.h>

int main()
{
  pid_t id = fork(); //创建子进程
  
  if(id == 0)
  {
    //child
    while(1)
    {
      printf("我的子进程,我的pid为:%d,我父亲的pid为:%d\n", getpid(), getppid());
      sleep(1);
    }
  }
  else if(id > 0)
  {
    //parent 
    while(1)
    {
      printf("我的父进程,我的pid为:%d,我父亲的pid为:%d\n", getpid(), getppid());
      sleep(1);
    }
  }
  else 
  {
    printf("创建进程失败!");
    return 1;
  }
  return 0;
}

执行结果如下:

fork一般使用if进行分流(根据返回值不同)

通过写实拷贝保证代码共享和进程独立性

五.下章重点 

5.1 进程状态

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

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

相关文章

卷积和相关

卷积和相关是两种运算关系(或过程),都是含参变量的无穷积分。都是两个函数通过某种运算得到另外一个函数。 卷积运算: 可用来表示一个观测系统或一个观 测仪器对输入信号的作用过程等。 相关运算:常用来比较两个函数的关联性,相似程度,用于信号检测,图像识别。如:在混…

SCSAI平台面向对象建模技术的设计和实现(1)

SCSAI平台面向对象建模技术的设计和实现&#xff08;1&#xff09; 原创 团长团 AI智造AI编程 2024年09月19日 20:09 北京 用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCSAI,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现…

【jupyter notebook】环境部署及pycharm连接虚拟机和本地两种方式

Python数据处理分析简介 Python作为当下最为流行的编程语言之一 可以独立完成数据分析的各种任务数据分析领域里有海量开源库机器学习/深度学习领域最热门的编程语言在爬虫&#xff0c;Web开发等领域均有应用 与Excel&#xff0c;PowerBI&#xff0c;Tableau等软件比较 Excel有…

双立方(三次)卷积插值

前言 图像处理中有三种常用的插值算法&#xff1a; 最邻近插值 双线性插值 双立方&#xff08;三次卷积&#xff09;插值 其中效果最好的是双立方&#xff08;三次卷积&#xff09;插值&#xff0c;本文介绍它的原理以及使用 如果想先看效果和源码&#xff0c;可以拉到最底…

【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection

论文地址&#xff1a;https://arxiv.org/abs/2405.14458 文章目录 论文小结论文简介论文方法为NMS-free训练的一致性双标签分配双标签分配一致性匹配度量 效率-精度整体驱动的模型设计效率驱动模型设计轻量级分类检测头Spatial-channel 解耦下采样Rank-guided block design 精度…

Vue3中的Pinia——管理应用程序的全局状态

介绍Pinia Pinia 是 Vue.js 的状态管理库&#xff0c;主要用于管理应用程序的全局状态。它是 Vuex 的替代品&#xff0c;提供了更简单和更灵活的 API。Pinia 的主要作用包括&#xff1a; 1. 状态管理&#xff1a;Pinia 允许你在应用中集中管理状态&#xff0c;方便不同组件之…

微服务以及注册中心

一、什么是微服务 微服务是指开发一个单个小型的但有业务功能的服务&#xff0c;每个服务都有自己的处理和轻量通讯机制&#xff0c;可以部署在单个或多个服务器上。微服务也指一种松耦合的、有一定的有界上下文的面向服务架构。也就是说&#xff0c;如果每个服务都要同时修改…

Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.

Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.Youmayincreasethelimitbyauthenticatingandupgrading:https://www.docker.com/increase−rate−limit.See ′ dockerrun−−help 在拉取docker进行的时候遇到这个问题,如何解决呢?本文提供的解决方…

石英晶体谐振器:核心功能材料及其工作原理与应用

晶发电子专注17年晶振生产,晶振产品包括石英晶体谐振器、振荡器、贴片晶振、32.768Khz时钟晶振、有源晶振、无源晶振等&#xff0c;产品性能稳定,品质过硬,价格好,交期快.国产晶振品牌您值得信赖的晶振供应商。 石英晶体谐振器&#xff0c;又称为无源晶振&#xff0c;是现代电子…

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

云平台在大规模设备管理和数据分析中的作用

在当代数字化转型的浪潮中&#xff0c;云平台作为信息技术基础设施的核心组件&#xff0c;扮演着无可替代的角色&#xff0c;尤其在大规模设备管理和数据分析领域&#xff0c;其重要性和影响力日益凸显。本文旨在深入探讨云平台如何通过其独特的优势&#xff0c;促进数据的高效…

ROS第五梯:ROS+VSCode+C++单步调试

解决问题&#xff1a;在ROS项目中进行断点调试。 第一步&#xff1a;创建一个ROS项目或者打开一个现有的ROS项目。 第二步&#xff1a;修改c_cpp_properties.json 增加一段命令: "compileCommands": "${workspaceFolder}/build/compile_commands.json"第三…

11.第二阶段x86游戏实战2-找人物状态

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

gma 2.0.13 (2024.09.16) 更新日志

安装 gma 2.0.13 pip install gma2.0.13网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版…

WinRAR 创建自解压文件 添加桌面快捷方式 自定义图标

一、需求描述 将我们开发的软件&#xff0c;打包成exe安装包形式&#xff0c;让用户双击后可以选择安装位置&#xff0c;并在安装完成后&#xff0c;自动生成桌面快捷方式&#xff08;以任意我们自定义的图标和描述&#xff09; 二、准备 1.根据需求准备如下几种图标 软件安…

解析药用植物重楼甾体皂苷生物合成中的连续糖基化及其抗真菌作用-文献精读49

Unraveling the serial glycosylation in the biosynthesis of steroidal saponins in the medicinal plant Paris polyphylla and their antifungal action 解析药用植物重楼甾体皂苷生物合成中的连续糖基化及其抗真菌作用 摘要 糖–糖糖基转移酶在构建复杂的具有生物活性的…

走进低代码表单开发(五):高效开发的利器

前面我们已经介绍了勤研低代码开发平台的权限管理相关的内容&#xff0c;当表单设计完成后&#xff0c;我们将继续探索表单的其他功能&#xff0c;接下来&#xff0c;我们一起来看看勤研低代码平台还能如何为用户带来更便捷的开发体验。 一、表单导入 表单导入功能是勤研低代码…

电气自动化入门03:安全用电

视频链接&#xff1a;2.1 电工知识&#xff1a;触电原因与防触电措施_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW/?p4&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电流对人体的危害 电击&#xff1a;电流通过人体。 电伤&#xff1a;电流热效应…

深入理解Unreal中的AI感知系统

StimuliSource和PerceptionListener 感知作为一种信号&#xff0c;整个场景中存在这个信号的生产者和消费者。这种信号在Unreal中被叫做刺激Stimuli 生产者就是StimuliSource&#xff0c;通过挂载StimuliSourceComponent并RegisterForSense来注册成为哪些类型刺激的刺激源 消费…

聚焦API安全未来,F5打造无缝集成的解决方案

研究发现&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标。随着对API使用需求的增加&#xff0c;这些攻击还会持续增长。现代企业需要一种动态防御策略&#xff0c;在风险升级成代价高昂、令人警惕且往往无法预防的API安全漏洞之前&#xff0c;发现并降低风险。 …