Linux 第十一章

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

进程

​编辑

进程怎么管理

task_struct 核心字段都有哪些

进程(任务)对应的标识符:

如何去查看一个进程的pid?

进程创建

linux中创建进程的方式

1.命令行中直接启动进程(手动启动)

2.通过代码来进程创建

在操作系统加载到内存时,其他进程并不是在操作系统这块内存上加载的。

父进程是什么

bash:命令行解释器

如何获取父进程的ID?

查看进程的第二种方式

工作目录


进程

引入:在内存上的程序就是进程,操作系统内可能会同时存在多个进程,操作系统就要管理所有的进程

进程怎么管理

类似创建结构体,将各个进程的属性放在对应的结构体中,连接所有的结构体,这样操作系统可以很好的管理

进程pcb:进程控制块

就是一个结构体,结构体里放着进程的各种属性(id、代码地址和数据地址、状态、优先级、链接字段等)

对进程的管理,被建模为对进程控制块链表的管理

总结:

什么是进程?

进程=可执行程序+内核数据结构(pcb、….)

内核数据结构:方便os对进程进行管理

task_struct 核心字段都有哪些

Linux中,进程pcb具体是struct task_struct,Linux中采用双链表的形式链接的pcb

进程(任务)对应的标识符:

pid(每一个正在运行的进程都有一个唯一的标识符)

如何去查看一个进程的pid?

1)通过ps(Linux中的"ps"指令用于查看系统中正在运行的进程信息)

//ps ajx是一种用于显示Linux系统进程信息的命令
[BCH@hcss-ecs-6176 9_23]$ ps ajx | head -1 && ps ajx | grep mycode//&& 可以同时执行两个命令
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
2932 28593 28593  1485 pts/0    28593 S+    1000   0:00 ./mycode
3906 28927 28926  2057 pts/2    28926 R+    1000   0:00 grep --color=auto mycode//因为我们使用了grep这个指令,所以查询mycode进程时,也查询到grep的进程

2)通过系统调用的方法去查看pid

谁调用getpid()这个函数,就获取这个进程的pid,需要头文件#include<sys/types.h> #include<unistd.h>code.c文件
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{int i=0;while(i<100){pid_t id=getpid();printf("我是一个进程...,我的pid%d\n",id);sleep(1);i++;}return 0;
}[BCH@hcss-ecs-6176 9_23]$ make 
make: “mycode”是最新的。
[BCH@hcss-ecs-6176 9_23]$ ./mycode
我是一个进程...,我的pid12163//这个进程的pid就是12163
我是一个进程...,我的pid12163
我是一个进程...,我的pid12163
我是一个进程...,我的pid12163

我们可以用进程pid对进程进行控制

例如 kill -9 进程id//这样就可以杀死改id的进程

进程ppid:父进程id

命令行中父进程到底是谁呢?

命令行解释器bash

进程创建

linux中创建进程的方式

1.命令行中直接启动进程(手动启动)

    1)在输入指令的时候,回车这样进程就启动了

    2)在windows中双击图标的时候,进程就启动了

2.通过代码来进程创建

fork等函数,启动进程的时候,操作系统会创建对应的pcb,本质就是创建进程,一般是通过父进程创建的(父子关系)!

在操作系统加载到内存时,其他进程并不是在操作系统这块内存上加载的。

当操作系统启动后,它会为每个正在运行的进程分配独立的内存空间。操作系统会为每个进程创建一个称为进程控制块(Process Control Block,PCB)的数据结构来管理进程的状态和资源信息。

每个进程的 PCB 包含了进程的代码、数据和堆栈等信息,这些内容被加载到各自的内存空间中。操作系统负责调度不同进程之间的切换,并确保每个进程在其分配的内存空间中运行,从而实现进程间的隔离和保护。

因此,当操作系统加载到内存时,它会为其他进程分配独立的内存空间,并在这些内存空间中加载并运行各个进程的代码和数据。每个进程的内存空间都是相互独立的,彼此之间不会互相干扰。这种隔离和保护机制有助于确保操作系统和各个进程的稳定性和安全性。

父进程是什么

父进程是指在创建一个新进程时生成该新进程的现有进程。

bash:命令行解释器

我们命令行启动的进程,都是bash的子进程

如何获取父进程的ID?

通过getppid函数

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{int i=0;while(i<100){printf("I am a process: myid: %d,parent id: %d\n",getpid(),getppid());//获取父子进程sleep(1);i++;}return 0;
}[BCH@hcss-ecs-6176 9_23]$ make
gcc -o mycode code.c
[BCH@hcss-ecs-6176 9_23]$ ./mycode//加载进程
I am a process: myid: 29912,parent id: 20426//子进程的pid是29912,父进程的pid20426
I am a process: myid: 29912,parent id: 20426
I am a process: myid: 29912,parent id: 20426

task_struct:其中肯定包含pid、ppid

查看进程的第二种方式

除了使用ps命令查看进程,Proc动态目录结构,存放所有存在的进程,目录的名称就是以这个id命名的

该目录下的文件:其中就包含了该进程的所有属性

[BCH@hcss-ecs-6176 9_23]$ ls /proc/25204 -l
总用量 0
dr-xr-xr-x 2 BCH BCH 0 9月  25 10:24 attr
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 autogroup
-r-------- 1 BCH BCH 0 9月  25 10:24 auxv
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 cgroup
--w------- 1 BCH BCH 0 9月  25 10:24 clear_refs
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 cmdline
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 comm
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 coredump_filter
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 cpuset
lrwxrwxrwx 1 BCH BCH 0 9月  25 10:24 cwd -> /home/BCH/9_23//当前目录
-r-------- 1 BCH BCH 0 9月  25 10:16 environ
lrwxrwxrwx 1 BCH BCH 0 9月  25 10:16 exe -> /usr/bin/bash//一个进程,能够找到自己的可执行程序
dr-x------ 2 BCH BCH 0 9月  25 10:16 fd
dr-x------ 2 BCH BCH 0 9月  25 10:24 fdinfo
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 gid_map
-r-------- 1 BCH BCH 0 9月  25 10:24 io
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 limits
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 loginuid
dr-x------ 2 BCH BCH 0 9月  25 10:24 map_files
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 maps
-rw------- 1 BCH BCH 0 9月  25 10:24 mem
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 mountinfo
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 mounts
-r-------- 1 BCH BCH 0 9月  25 10:24 mountstats
dr-xr-xr-x 5 BCH BCH 0 9月  25 10:24 net
dr-x--x--x 2 BCH BCH 0 9月  25 10:24 ns
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 numa_maps
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 oom_adj
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 oom_score
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 oom_score_adj
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 pagemap
-r-------- 1 BCH BCH 0 9月  25 10:24 patch_state
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 personality
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 projid_map
lrwxrwxrwx 1 BCH BCH 0 9月  25 10:24 root -> /
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 sched
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 schedstat
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 sessionid
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 setgroups
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 smaps
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 stack
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 stat
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 statm
-r--r--r-- 1 BCH BCH 0 9月  25 10:16 status
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 syscall
dr-xr-xr-x 3 BCH BCH 0 9月  25 10:24 task
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 timers
-rw-r--r-- 1 BCH BCH 0 9月  25 10:24 uid_map
-r--r--r-- 1 BCH BCH 0 9月  25 10:24 wchan

我们一般查看进程,还是优先使用ps命令

工作目录

工作目录是指当前用户所处的目录,也称为当前工作目录或当前目录。当你在终端中打开一个新的命令行窗口或者执行一个命令时,你所处的目录就是工作目录。

你可以使用 pwd 命令(print working directory)来查看当前工作目录的绝对路径。你也可以使用 cd 命令(change directory)来切换工作目录到其他目录。

例如,如果你的当前工作目录是 /home/user,那么在终端中执行 
pwd 命令会显示 /home/user,执行 cd Documents 命令会将工作目录
切换到 /home/user/Documents。

工作目录在 Linux 中非常重要,因为许多命令和操作都是基于当前工作目录进行的。

总结:

1)一个进程,能够找到自己的可执行程序

2)每一个进程,都有自己的工作目录

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 

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

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

相关文章

Java 图形化框架 - AWT、Swing

文章目录 关于 AWTAWT继承体系 关于 Swing关于 JFC 和 Swing Swing 组件组件层次Swing组件和AWT组件的对应关系&#xff1a;Swing组件按照功能来分类&#xff1a; Java使用AWT和Swing相关的类可以完成图形化界面编程&#xff0c;其中AWT的全称是抽象窗口工具集(Abstract Window…

北大发现了一种特殊类型的注意力头!

检索头的发现或许将有力地帮助大模型领域在提高长上下文推理能力、减少幻觉和压缩KV缓存方面的研究。 从 Claude100K 到 Gemini10M&#xff0c;我们正处于长上下文语言模型的时代。如何在长上下文中利用任何输入位置的信息&#xff1f;北大联合另外四所高校发现了一种特殊类型…

运维 kubernetes(k8s)基础学习

一、容器相关 1、发展历程&#xff1a;主机–虚拟机–容器 主机类似别墅的概念&#xff0c;一个地基上盖的房子只属于一个人家&#xff0c;很多房子会空出来&#xff0c;资源比较空闲浪费。 虚拟机类似楼房&#xff0c;一个地基上盖的楼房住着很多人家&#xff0c;相对主机模式…

微信小程序的开发

1.了解项目的基本组成结构 pages 用来存放所有小程序的页面 utils 用来存放工具性质的模块(例如:格式化时间的自定义模块) app.js 小程序项目的入口文件 app.json 小程序项目的全局配置文件 app.wxss 小程序项目的全局样式文件 project.config.json 项目的配置文件 sitem…

Docker基础学习(5.Docker镜像命令)

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ ⭐微信公众号&#xff1a;码上言 文章目录 Docker run流程镜像是什么&a…

通用视觉多模态大模型 一统理解/生成/分割/编辑

这是一款通用视觉多模态大模型&#xff0c;支持从视觉理解到视觉生成、从低层次到高层次的一系列视觉任务&#xff0c;解决了困扰大语言模型产业已久的图像/视频模型割裂问题&#xff0c;提供了一个全面统一静态图像与动态视频内容的理解、生成、分割、编辑等任务的像素级通用视…

C++必修:类与对象(一)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 面向过程与面向对象 1.1. 面向过程 我们之前学习的C语言就是一种面向过程的语…

【网络通信】初探网络层次结构(OSI七层网络模型)

随着信息技术的飞速发展&#xff0c;网络通信已经成为现代社会不可或缺的一部分。网络通信的实现离不开网络协议栈的支持&#xff0c;而网络协议栈则是由多个层次组成的。这些层次各自承担着不同的任务&#xff0c;共同构成了网络通信的基石。本文将对网络通信中的各类层进行详…

Swift - 函数

文章目录 Swift - 函数1. 函数的定义2. 隐式返回(Implicit Return)3. 返回元组&#xff1a;实现多返回值4. 函数的文档注释5. 参数标签&#xff08;Argument Label&#xff09;6. 默认参数值&#xff08;Default Parameter Value&#xff09;7. 可变参数&#xff08;Variadic P…

LM2576D2TR4-5G 3.0安15伏降压开关稳压器 PDF中文资料_参数_引脚图

LM2576D2TR4-5G 规格信息&#xff1a; 制造商:ON Semiconductor 产品种类:开关稳压器 RoHS:是 装置风格:SMD/SMT 封装 / 箱体:TO-263-5 输出电压:5 V 输出电流:3 A 输出端数量:1 Output 最大输入电压:45 V 拓扑结构:Buck 最小输入电压:7 V 开关频率:52 kHz 最小工作…

seq2seq架构略解

用于序列翻译任务&#xff08;下图来自d2l&#xff09; 训练时输入输出格式&#xff1a; 若数据集为{ <(a1,a2,a3,a4,a5),(b1,b2,b3,b4,b5)> }&#xff08;AB语言对应的句子组&#xff09; 输入 A语言的单词序列结束符&#xff08;a1,a2,a3,a4,a5,<eos>&#xf…

Unity类银河恶魔城学习记录14-5 p152 Lost currency save and enemy‘s currency drop

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili LostCurrencyController.cs using System.Collections; using System.Colle…

【STM32+HAL】三轴按键PS2摇杆

一、准备工作&#xff1a; 有关CUBEMX的初始化配置&#xff0c;参见我的另一篇blog&#xff1a;【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置&#xff0c;详见【STM32HAL】ADC采集波形实现 二、所用工具&#xff1a; 1、芯片&#xff1a; STM32F407VET6 2、CUBE…

通义灵码-IDEA的使用教程

通义灵码-IDEA的使用教程 1、通义灵码是什么&#xff1f; 通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#…

MATLAB矩阵

MATLAB 矩阵 矩阵是数字的二维数组。 在MATLAB中&#xff0c;您可以通过在每行中以逗号或空格分隔的数字输入元素并使用分号标记每行的结尾来创建矩阵。 例如&#xff0c;让我们创建一个45矩阵一- 示例 a [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8] MATLAB将执行上述语…

uniapp微信小程序开发踩坑日记:Vue3 + uniapp项目引入Echarts图表库

一、下载插件包 下载地址如下&#xff1a; lime-echart: 百度图表 echarts&#xff0c;uniapp、taro 使用 echarts 图表&#xff0c;全面兼容各平台小程序、H5、APP、Nvue 将以下两个文件夹放到项目的components里 同样地&#xff0c;将静态资源文件夹下内容放到自己项目的s…

什么是端口

啊&#xff0c;端口&#xff01;这可是计算机网络中一个非常重要的概念呢。 简单来说&#xff0c;端口就好比是网络通信中的门&#xff0c;用来区分不同的应用程序或服务。我们知道&#xff0c;计算机在进行网络通信时需要通过网络传输数据&#xff0c;而端口就是帮助计算机在…

vue echarts 饼图(环形图)

vue echarts 饼图(环形图) &#xff0c;echarts版本为5.3.3 可以自定义颜色 <template><div><div id"pieChart1" ref"pieChartRef1" style"width: 100%; height: 250px"></div></div></template><scri…

ASP.NET教务平台—学籍管理模块开发与设计

摘 要 教务平台之学籍管理模块是一个典型的教务信息管理系统(MIS)&#xff0c;其开发主要包括后台数据库的建立和前端应用程序的开发两个方面。对于后台数据库要求实现数据的完整性、一致性和安全性&#xff1b;对于前台应用程序开发则要求模块功能完备、界面友好、易使用等特…

java中http调用组件深入详解

目录 一、前言 二、http调用概述 2.1 什么是http调用 2.1.1 http调用步骤 2.2 HTTP调用特点 2.3 HTTP调用应用场景 三、微服务场景下http调用概述 3.1 微服务开发中http调用场景 3.2 微服务组件中http的应用 四、常用的http调用组件 4.1 java中常用的http组件介绍 4…