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

目录

一、什么是进程

二、进程的标识符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.mzph.cn/news/622694.shtml

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

相关文章

STM32H5 Nucleo-144 board开箱

文章目录 开发板资料下载 【目标】 点亮LD1(绿)、LD2(黄)和LD3(红)三个LED灯 【开箱过程】 博主使用的是STM32CubeMX配置生成代码,具体操作如下: 打开STM32CubeMX,File-…

Raspberry Pi 4B 蓝牙串口(SPP)配置与使用

Raspberry Pi 4B 蓝牙串口(SPP)配置与使用 文章目录 Raspberry Pi 4B 蓝牙串口(SPP)配置与使用1、蓝牙相关命令工具2、Linux中的蓝牙堆栈3、蓝牙串口配置4、蓝牙串口数据发送与接收 本文将详细介绍如何在Raspberry Pi 4B卡片电脑中…

快速入门java网络编程基础------Nio

一. NIO 基础 哔哩哔哩黑马程序员 netty实战视频 0.什么是nio? NIO(New I/O)是Java中提供的一种基于通道和缓冲区的I/O(Input/Output)模型。它是相对于传统的IO(InputStream和OutputStream)模型…

Spring boot - Task Execution and Scheduling @Async

SpringBoot的任务执行器 Spring Boot通过auto-configuration机制自动创建了任务执行器Task Execution,因此在SpringBoot项目中,你不需要任何配置、也不需要自己创建Task Execution就可以直接使用它。 Spring Boot通过auto-configuration机制创建的任务…

nodejs+vue+ElementUi银行贷款业务管理系统

银行贷款管理系统的主要实现功能包括:管理员:首页、个人中心、用户管理、银行管理、贷款信息管理、贷款申请管理、金额发布管理、还款信息管理、通知信息管理,用户:首页、个人中心、贷款信息管理、贷款申请管理、金额发布管理、还…

phpinfo和php -m 加载的php.ini不一致

目的: 将phpinfo在web中展示的php.ini和在命令行中展示的php.ini加载路径设置一致。 原本的php.ini加载路劲是: /usr/local/lib/php.ini 解决思路: (1)which php 查看服务器加载的php的位置,这里原来是&a…

差分算法模板

差分算法模板 一维差分一维insert函数(构造差分数组和实现区域加数操作)一维差分模板题 二维差分二维insert函数(构造差分数组和实现区域加数操作)二维差分模板题 一维差分 差分主要是计算出某个区域段的数分别加上一个数 先给定一个原数组a:a[1], a[2], a[3], a[n]…

CNN:Convolutional Neural Network(上)

目录 1 为什么使用 CNN 处理图像 2 CNN 的整体结构 2.1 Convolution 2.2 Colorful image 3 Convolution v.s. Fully Connected 4 Max Pooling 5 Flatten 6 CNN in Keras 原视频:李宏毅 2020:Convolutional Neural Network 1 为什么使用…

NumPy:从初识到实战,探索Python科学计算的无限可能

NumPy 在浩瀚的Python编程世界中,有一个强大的库如星辰般璀璨,它是数据科学家、机器学习工程师乃至量化金融分析师手中的利器——NumPy,它以其高效的数据处理能力和便捷的矩阵运算机制,在科研与工程领域中占据着举足轻重的地位。…

Java BIO、NIO(通信/群聊系统、零拷贝)、AIO

Java BIO、NIO(通信/群聊系统、零拷贝)、AIO BIO、NIO、AIO特点和场景 BIO(Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O)是Java中用于处理I/O操作的三种不同的I/O模型,它们具…

day16 二叉树的最大深度 n叉树的最大深度 二叉树的最小深度 完全二叉树的节点数

题目1:104 二叉树的最大深度 题目链接:104 二叉树的最大深度 题意 二叉树的根节点是root,返回其最大深度(从根节点到最远叶子节点的最长路径上的节点数) 递归 根节点的的高度就是二叉树的最大深度 所以使用后序遍…

系列六、Spring Security中的认证 授权 角色继承

一、Spring Security中的认证 & 授权 & 角色继承 1.1、概述 关于Spring Security中的授权,请参考【系列一、认证 & 授权】,这里不再赘述。 1.2、资源类 /*** Author : 一叶浮萍归大海* Date: 2024/1/11 20:58* Description: 测试资源*/ Re…

思科模拟器中环境条件设置第一步

一直设想若上图中的温度在不同房间显示和物理环境一样的结果。 于是乎看了 经过实验 原因是 在模拟器的physcial中设置就可以实现不同的温度。 接下来就是合理使用了! 对类似实验感兴趣的同学,一起加入尝试:微信号imaguofeng 2024年1月14…

计算机找不到vcomp140.dll怎样修复?马上教会你修复dll问题

在计算机系统运行过程中,遭遇“vcomp140.dll丢失”的场景并不少见,这一问题的出现往往伴随着软件无法正常启动、运行时错误提示或者系统性能下降等现象。具体场景可能包括但不限于:用户在尝试打开某个依赖于Visual C Redistributable库的应用…

数据在AI图像修复任务中的核心作用

在人工智能(AI)领域,数据的重要性不言而喻。尤其在图像修复任务中,数据的精度和质量直接影响着AI模型的性能。图像修复是指利用AI技术自动识别图像中的缺陷或遮挡物,并对其进行修复或还原的过程。这项技术广泛应用于各…

基于pyradiomics影像组学特征提取

基于pyradiomics影像组学特征提取 特征提取:1 pyradiomics的使用:1.1,在python环境下安装pyradiomics:1.2,设置特征提取器,获得想要特征:1.2.1 图像类型1.2.2 目标特征设置1.2.3 特征提取器设置 2 代码示例;参考&#…

【web服务搭建实验】之nginx基础学习

目录 一、nginx的简介二、nginx安装实验虚拟主机的配置web服务器的主流实现方式-LAMP和LNMP 一、nginx的简介 Nginx是一款轻量级HTTP服务器,同时也是代理邮箱服务器,具备反向代理,通用代理的功能。支持多个系统,和不同操作系统。…

【算法】Java-二叉树的右视图(BFS、DFS两种解法)

题目要求: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入…

e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

Jetpack Compose -> 声明式UI Modifier

前言 本章主要介绍下 Compose 的声明式 UI 以及初级写法&#xff1b; 什么是声明式UI 传统UI 传统 UI 方式来声明UI <androidx.appcompat.widget.LinearLayoutCompat android:layout_width"match_parent" android:layout_height"match_parent&quo…