Linux------进程的初步了解

news2024/11/20 3:32:58

目录

一、什么是进程

二、进程的标识符pid

三、getpid 得到进程的PID

四、kill 终止进程

五、父进程与子进程

六、目录中的进程


一、什么是进程

在windows中,我们查看进程很简单,打开任务管理器,就可以看到在运行的进程。这里我们还可以看到CPU要对进程进行处理,并且进程已经加载到了内存里

那么什么是进程呢? 

课本概念:程序的一个执行实例,正在执行的程序等。

内核观点:担当分配系统资源(CPU时间,内存)的实体。

在操作系统内部存在很多进程,操作系统要对进程进行管理,就得先描述,在组织。具体为什么参考这篇文章冯诺依曼与操作系统。使用结构体将进程描述起来,再使用数据结构将他们组织连接起来,这样我们对进程的管理就转化为对数据结构的增删查改了

该结构体我们称之为进程的PCB(process control block)Linux操作系统下的PCB是: task_struct,他的结构体简略描述如下

struct task_struct
{
    //进程id
    //指向可执行程序的指针
    //等等属性
    struct task_struct*next
    //其他指针
}

比如在存放在磁盘上的各种可执行程序,运行时就会被加载到内存中,这时操作系统(第一个被加载到内存的软件)会帮助我们创建进程的PCB,并将PCB链接起来形成进程链表,后续操作系统对进程的管理就转变成了对进程链表的增删查改。

进程不仅仅只有进程链表这一个结构,同一个进程还有可能在其他的结构中,如进程的运行队列,会根据进程的优先级进行排队,等待CPU处理。

现在我们可以给进程下一个定义:进程 = 可执行程序 + 内核数据结构。这里的内核数据结构包括了PCB,这可以方便操作系统对进程进行管理。

二、进程的标识符pid

Linux中,输入指令ps ajx 可以查看当前所有进程

ps ajx

其中进程的的标识符被称作pid

同时我们也可以编写一个程序,执行起来,看看这个进程的情况。

随便写个打印的死循环,同时睡眠一下方便观看。

Makefile也写上。 

make 编译并执行

使用 ps ajx | head -1 取出第一行,同时通过 ps ajx | grep mycode 过滤出 mycode文件,这样就方便查看mycode进程的信息了,这里我们看到mycode进程的PID为1251。

 我们ctrl + c 将进程终止后,再去查询,就发现可执行程序 mycode被终止掉了。

再运行以下,发现又可以查到,并且PID发生了变化。

现在我们可以得出一个结论:我们运行的所有指令,软件,自己写的程序,最终都是进程

三、getpid 得到进程的PID

在冯诺依曼与操作系统中,我们讲到通过库函数可以去调用系统接口,这里我们学习第一个接口getpid。他可以获取该进程的id,返回参数为pid_t(本质是无符号整数)。

如下,包一下getpid的头文件sys/types.h,就可以开始使用getpid了。

编辑好wq保存并退出,make后再执行一下。 

四、kill 终止进程

输入指令 kill -9 + 进程PID  可以终止进程

-9这里为9号信号,这里记住就行。

五、父进程与子进程

其实,我们之前所写的可执行程序还有父进程。

这里我们观察到当前进程PID左边还有个PPID,这个PPID代表当前进程的父进程。

我们还发现当我们终止进程后重新启动该进程,进程的PID会发生变化,而PPID没有变。 如下图PPID都是5350。

Linux启动进程一般都是通过父进程创建的,那么这个父进程是谁呢? 这里我们看到该进程就是bash。当我们在命令行当中启动进程的时候,这些进程的父进程都是bash(命令行解释器)

我们有gitpid这个接口函数可以获取进程的pid,同时也有gitppid这个接口函数来获取进程ppid。我们将mycode.c做如下修改。

这里就可以打印出PPID了。 

六、目录中的进程

Linux还有种方式可以查看进程,就是通过目录查看。输入命令 ls /proc/  打开proc目录,这里面存放着所有的进程,目录的名称就是以这个进程的id命名的

如图,我们运行mycode程序,8040进程存在 ,终止进程,8040就不存在了。

在目录中,该进程的内容很多,我们大可不必全都了解,了解重要的部分就行,如了解cwd与exe这两个文件就行了。

exe代表着该进程能找到自己的可执行程序,如果可执行程序被删除也能发现。

cwd 代表当前工作目录,比如在我们使用fopen函数进行文件写入的时候,如果不使用绝对路径,就会写入到cwd中默认情况下,进程启动所处的路径就是当前路径。如下修改代码

 这样就写入到了当前工作目录下

如果我们使用 chdir("路径")  修改当前工作目录。 那么写入的地方就会变成你修改的路径。

写入到了 /home/kky/109 

同时cwd也被修改成了我们设置的目录 

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

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

相关文章

跟着暄桐林曦老师读《宝贵的人生建议》,重视心这颗种子

暄桐林曦老师在《见道明心的笔墨》读书课上讲到:人要在心这颗种子上去进化。当人的动机和果实都清静时,才能在内心具足里转化出更多可能性,进入正面的循环里。“宽以待人,严以律己,反之,则人人身处地狱”&a…

Tuxera NTFS for Mac v2023破解版百度云下载和激活

软件介绍 Tuxera NTFS for Mac破解版是一款mac读写NTFS磁盘工具软件,可以高效的读写NTFS格式的设备,对设备的存储空间进行访问、编辑、存储和传输文件等操作。此外这款软件还具备对硬盘等设备的管理以及修复检测功能,所以安装一款Tuxera NTF…

力扣日记1.14-【二叉树篇】108. 将有序数组转换为二叉搜索树

力扣日记:【二叉树篇】108. 将有序数组转换为二叉搜索树 日期:2023.1.14 参考:代码随想录、力扣 108. 将有序数组转换为二叉搜索树 题目描述 难度:简单 给你一个整数数组 nums ,其中元素已经按 升序 排列,…

【C++】-类和对象(友元!!内部类!!匿名对象!详解)

类和对象⑤ 友元内部类匿名对象 在之前的类和对象①、②、③、④篇中,详细讲解了类和对象的基本知识,本章为最终章,继续为大家介绍类和对象。 友元 我们已知的,在C中,有一种私有访问修饰符,用于限制类的成…

this.setState的注意事项

目录 1、this.setState的注意事项 2、是什么造成了this.setState()的不同步? 3、 那this.setState()什么时候同步,什么时候不同步? 3.1 经过React包装的onClick点击事件() 3.2 没经过React包装的 原生点击事件 …

stm32学习笔记:USART串口通信

1、串口通信协议(简介软硬件规则) 全双工:打电话。半双工:对讲机。单工:广播 时钟:I2C和SPI有单独的时钟线,所以它们是同步的,接收方可以在时钟信号的指引下进行采样。串口、CAN和…

18 串口通讯

文章目录 18.0 前言18.1 串口通讯协议简介18.1.1 物理层 18.2 RT1052 的 LPUART 简介18.3 UART 功能框图18.3.1 中断控制 18.4 UART 初始化结构体详解18.4.1 baudRate_Bps18.4.2 parityMode18.4.3 dataBitsCount18.4.4 isMsb18.4.5 stopBitCount18.4.6 txFifoWatermark与rxFifo…

计算机体系结构基础复习

1. 计算机系统可划分为哪几个层次,各层次之间的界面是什么? 你认为这样划分层次的意义何在? 答: 计算机系统可划分为四个层次,分别是:应用程序、 操作系统、 硬件系统、 晶体管四个大的层次。 注意把这四个层次联系起来的三个界面。各层次…

WIndows系统重装、备份与恢复实操问题笔记

一 windows重装 1.1 基本步骤 下载大白菜根据官网使用教程制作启动u盘从MSDN或者微软官网下载Windows镜像根据查询的快捷键进入BIOS系统,设置U盘为第一启动 重装 1.2 Windows 11 激活 微软其实在2023年9月20日的公告中宣布停掉免费升级,数字激活工具…

使用pygame实现简单的烟花效果

import pygame import sys import random import math# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Fireworks Explosion")# 定义颜色 black (0, 0, 0) wh…

YOLOv7涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv7中如何使用 1)iAFF加入Neck替代Concat; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOL…

Linux远程登陆协议ssh

目录 一、SSH服务 1. ssh基础 2. 原理 3. 服务端配置 3.1 常用配置项 3.2 具体操作 3.2.1 修改默认端口号 3.2.2 禁止root用户登录 3.2.3 白名单列表 3.2.4 黑名单列表 3.2.5 使用秘钥对及免交互验证登录 3.2.6 免交互式登录 一、SSH服务 1. ssh基础 SSH&…

Microsoft Excel 直方图

Microsoft Excel 直方图 1. 数据示例2. 打开 EXCEL3. settings4. 单击直方图柱,右键“添加数据标签”References 1. 数据示例 2. 打开 EXCEL 数据 -> 数据分析 -> 直方图 3. settings 输入区域样本值、接受区域分类间距,输出选项选择“新工作表组…

玩转Mysql 八 (MySQ优化入门篇)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 前言: 一个高性能,稳定的数据库集群并不是指的某一特性优化,就…

3 - AOP

1. 快速入门 1.1 基本说明 AOP(aspect oriented programming) ,面向切面编程 切面类中声明通知方法: 前置通知:Before返回通知:AfterReturning异常通知:AfterThrowing后置通知:After环绕通知&#xff1…

并发List源码剖析

并发包中的并发List只有CopyOnWriteArrayList。 CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。 在CopyOnWriteArrayList的类图中,每个CopyOnWriteArrayList对…

(学习日记)2024.01.05:一份关于自行车定位的调研

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

电流检测方法

电路检测电路常用于:高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用,都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV~数百mV的电阻值&…

BLDC 电机和 PMSM 的结构区别

BLDC 电机和 PMSM 的结构类似,其永磁体均置于转子,并被定义为同步电机。在同步电机中,转子与定子磁场同步,即转子的旋转速度与定子磁场相同。它们的主要区别在于其反电动势(反 EMF)的形状。电机在旋转时充当…

NPS配置https访问web管理页面

因为NPS默认也支持http的访问,所以在部署完后就一直没在意这个事情。 因为服务器是暴露在公网内的,所以还是要安全一点才行。不然一旦远控的机器被破解了就很危险了 一、使用nginx反向代理访问 1、首先在nps的配置文件里关闭使用https选项,…