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.rhkb.cn/news/314834.html

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

相关文章

Ubuntu终端常用指令

cat cat 读取文件的内容 1、ls 一、 1、ll 显示当前目录下文件的详细信息,包括读写权限,文件大小,文件生成日期等(若想按照更改的时间先后排序,则需加-t参数,按时间降序(最新修改的时间排在最前)执行: $ ll -t, 按时间升序执行: $ ll -t | tac): ll 2、查看当前所处路径(完整…

自然语言处理: 第二十八章大模型基底之llama3

项目地址: meta-llama/llama3: The official Meta Llama 3 GitHub site 前言 LLaMa系列一直是人们关注的焦点&#xff0c;Meta在4月18日发布了其最新大型语言模型 LLaMA 3。该模型将被集成到其虚拟助手Meta AI中。Meta自称8B和70B的LLaMA 3是当今 8B 和 70B 参数规模的最佳模…

【oj题解】二分算法、二分答案

1909 - 跳石头 题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行&#xff0c;河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间&#xff0c;有 N 块岩石&#xff08;不含起点和终点的岩石&#xf…

Qt:学习笔记一

一、工程文件介绍 1.1 main.cpp #include "widget.h" #include <QApplication> // 包含一个应用程序类的头文件 //argc&#xff1a;命令行变量的数量&#xff1b;argv&#xff1a;命令行变量的数组 int main(int argc, char *argv[]) {//a应用程序对象&…

朴素贝叶斯算法分类

def loadDataSet():postingList[[my, dog, has, flea, problems, help, please], #切分的词条[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, posting, stupid, worthless, garbage],[mr, licks, ate, my, steak, …

Linux - tar (tape archive)

tar 的全称是 Tape Archive。它最初是在 Unix 系统中用于将数据写入磁带的工具&#xff0c;但现在它通常用于创建、维护、修改和提取文件的归档文件。尽管 tar 可以用于压缩和解压缩文件&#xff0c;但它本身并不进行压缩&#xff0c;而是通常与 gzip 或 bzip2 等压缩工具一起使…

记录——FPGA的学习路线

文章目录 一、前言二、编程语言2.1 书籍2.2 刷题网站2.3 仿真工具 三、基础知识3.1 专业基础课3.2 fpga相关专业知识 四、开发工具五、动手实验 一、前言 也不是心血来潮想学习fpga了&#xff0c;而是祥哥还有我一个国科大的同学都在往fpga这个方向走 并且看过我之前文章的同…

springboot+springsecurity+vue前后端分离权限管理系统

有任何问题联系本人QQ: 1205326040 1.介绍 优秀的权限管理系统&#xff0c;核心功能已经实现&#xff0c;采用springbootvue前后端分离开发&#xff0c;springsecurity实现权限控制&#xff0c;实现按钮级的权限管理&#xff0c;非常适合作为基础框架进行项目开发。 2.效果图…

EureKa技术解析:科技行业的革新风暴(ai写作)

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

【Hadoop】-Apache Hive使用语法与概念原理[15]

一、数据库操作 创建数据库 create database if not exists myhive; 使用数据库 use myhive; 查看数据库详细信息 desc database myhive; 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的&#xff1a;/user/hive/warehouse内 创建数据库并指定hdfs…

盛水最多的容器 ---- 双指针

题目链接 题目: 分析: 最大容积 即使就是最大面积, 长为下标之差, 宽为两下标对应值的最小值解法一: 暴力枚举: 将每两个数之间的面积都求出来, 找最大值, 时间复杂度较高解法二: 假设我们的数组是[6, 2, 5, 4], 我们先假设最左边和最右边, 即6 和 4 之间是最大面积长a*宽b此…

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK&#xff08;通过XCFrameworks|Swift packages|Xcode projects集成的&#xff09;需要包含一个隐私清单文件&#xff08;privacy manifest&#xff09;叫作 PrivacyInfo.xcprivacy。它是一个属性列表&#xff0c;记录了A…

CSS之显示覆盖内容(z-index)

前言&#xff1a; 我们有的时候&#xff0c;希望下方的内容能够显示到上方&#xff0c;达到类似于多个图层的效果&#xff0c;此时我们可以利用z-index这个属性。 介绍&#xff1b; z-index属性值是用来设置元素的堆叠顺序(元素层级)。 覆盖原则&#xff1a; <1>特殊…

debian配置distcc分布式编译

前言 distcc 是一个用于在网络上的多台机器上分发 C、C、Objective C 或 Objective C 代码构建的程序。 distcc 应始终生成与本地构建相同的结果&#xff0c;易于安装和使用&#xff0c;并且通常比本地编译快得多。 distcc 不要求所有机器共享文件系统、同步时钟或安装相同的…

React【Day4】

路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 2. 创建路由开发环境 # 使用CRA创建项目 npm create-react-app react-router-pro# 安装最新的ReactRouter包 …

Windows 系统上实现 sshpass 方案

sshpass 是 Linux 上的一个免输入密码通过 ssh 登录的方案&#xff0c;可以通过在命令行中指定密码&#xff0c;无需交互的方式完成一些自动化的动作。但是在 Windows 系统中并没有直接提供相关的支持。本篇文章针对这个思路探讨一下其他实现方式。 Win 安装 sshpass 在 gith…

SpringCloud系列(17)--将服务消费者Consumer注册进Zookeeper

前言&#xff1a;在上一章节中我们把服务提供者Provider注册进了Zookeeper&#xff0c;而本章节则是关于如何将服务消费者Consumer注册进Zookeeper 1、再次创建一个服务提供者模块&#xff0c;命名为consumerzk-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并…

初步认识Java

Java之父 Java 语言源于 1991 年 4 月&#xff0c;Sun 公司 James Gosling博士 领导的绿色计划(Green Project) 开始启动&#xff0c;此计划最初的目标是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个就是Java的前身&#xff1a; Oak (得…

移动端日志采集与分析最佳实践

前言 做为一名移动端开发者&#xff0c;深刻体会日志采集对工程师来说具有重要意义&#xff0c;遇到问题除了 debug 调试就是看日志了&#xff0c;通过看日志可以帮助我们了解应用程序运行状况、优化用户体验、保障数据安全依据&#xff0c;本文将介绍日志采集的重要性、移动端…

【软件安装】(十六)双系统Ubuntu22.04引导启动菜单的默认项

一个愿意伫立在巨人肩膀上的农民...... 好学的人总是喜欢在电脑上安装双系统&#xff0c;可是安装好系统之后&#xff0c;就会出现默认启动优先级的苦恼&#xff0c;如果在Bios中设置Windows引导启动为优先启动&#xff0c;那么每次想要进如Ubuntu系统就都需要重新设置Bios。如…