Linux进程概念(一)

文章目录

  • Linux进程概念
    • 查看进程
    • 杀死进程
    • 进程标识符
  • 手动创建进程的方式
    • fork函数创建进程
  • 进程状态
    • 运行态
    • 阻塞态和挂起


Linux进程概念

前文我们了解了,进程的基本概念,在课本上被描述为,正在执行的程序,在linux内核上,认为进程是担当分配系统资源(CPU时间,内存)的实体。

进程=内核描述数据结构(PCB)+代码和数据

在Linux中,PCB为task_struct,它会被装载到RAM(内存)里并且包含着进程的信息。

本文我们主要是了解进程的部分概念。

查看进程

查看进程的方式有很多种,前文我们介绍了在/proc 系统文件中查看,在该文件目录下,进程就是一个又有一个数字目录。

在这里插入图片描述

ps的使用

语法:ps ajx 可以查看当前所有进程

ps ajx | grep 程序/文件名 来查看程序/文件的进程信息

在这里插入图片描述

解释:

ps ajx | grep proc 可以在所有进程信息中,查找到proc的进程信息

ps ajx | head -1 表示将进程的属性的描述信息显示

ps ajx | head -1 && ps ajx | grep proc 显示进程proc的相关信息,并带上进程属性的描述

ps ajx | head -1 && ps ajx | grep proc | grep -v grep 不显示grep的进程信息

&&可以用分号代替,使得两条指令能一起执行,将执行的结果一并展示出来。

杀死进程

语法:kill -9 PID

向执行的PID进程发送9号信号,正在运行的PID进程显示killed,被杀死
在这里插入图片描述

进程标识符

PID:进程ID

PPID:父进程ID

获取标识符的方式:getpid()、getppid()

在这里插入图片描述

注意:getpid()和getppid()都是系统调用函数,来通过该函数来访问操作系统,得到自己的进程信息,重新运行程序子进程的PID会发生变化,但是父进程ID不会发生变化。

bash是所有程序的父进程,将其他程序作为其的子进程,子只有一个父,但是父可有多个子

手动创建进程的方式

我们知道两种创建进程的方式,第一种就是./proc执行程序,以此来创建进程,第二种,使用fork函数来创建进程。

创建进程的方式,有以下两种

  • ./运行程序 指令级别
  • fork函数 代码级别

fork函数创建进程

fork函数用来创建子进程。

两种结果

  • 成功创建子进程,子进程返回0,父进程返回的是子进程的PID
  • 创建失败,父进程返回-1

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{printf("这是一个进程,PID为:%d,PPID为:%d\n",getpid(),getppid());sleep(1);//fork()创建子进程pid_t id =fork();if(id == 0){//表示子进程while(1){printf("子进程,PID为:%d,PPID为:%d\n",getpid(),getppid());sleep(1);}}else if(id > 0){//父进程,PID是一个非负数while(1){printf("父进程, PID为:%d,PPId为:%d\n",getpid(),getppid());sleep(1);}}else{//创建子进程失败printf("创建子进程失败\n");}return 0;
}

问题:

  1. 为什么fork要给子进程返回0,给父进程返回子进程的PID?
  2. 一个函数是如何做到返回两次的?如何理解?
  3. 一个变量怎么会有不同的内容?如何理解?
  4. fork函数到底在干什么?干了什么?
  5. 进程调用的顺序
  6. bash是如何创建的,以及与fork的关系

为什么fork要给子进程返回0,给父进程返回子进程的PID?

在这里插入图片描述

总结:返回不同的返回值,是为了区分父子进程,使得执行不同的代码块

一个函数是如何做到返回两次的?如何理解?
在这里插入图片描述

两个返回值的实现依赖于,在创建子进程之后,父子进程共享代码

一个变量怎么会有不同的内容?如何理解?

在这里插入图片描述

在任何平台,进程在运行的时候,都是具有独立性的,子进程是和父进程开始指向同一数据的,但是如果子进程修改某一数据,就会发生写时拷贝,指向开辟的空间。

fork函数到底在干什么?干了什么?
在这里插入图片描述

fork函数就是创建子进程,然后根据进程的不同返回不同的数据。

进程调用的顺序

调度器:是一种执行选取进程的算法,决定选取哪一个进程放在CPU上执行。

父子进程创建完毕之后,谁先运行是由调度器来决定的,所以不知道谁先被执行

bash是如何创建的,以及与fork的关系

在这里插入图片描述

进程状态

在这里插入图片描述

运行态

运行态,顾名思义,该进程现在是可以被执行的,已经准备好被调用了。
在这里插入图片描述

注意:一个进程是否是运行态,看这个进程是否被放在运行队列(runqueue中),一个CPU只有一个运行队列(runqueue)

阻塞态和挂起

在这里插入图片描述

阻塞态,就是等待I/O完成的进程,需要I/O的进程去找对应的外设,连接外设的struct task_struct* head,形成链表,然后在等待输入数据的过程,这就是阻塞

挂起,就是由于操作系统空间不足时,我们将阻塞态的进程的空闲的代码和数据,换出(从内存放在硬盘中),这就叫做挂起。一般的挂起指的是阻塞挂起,运行挂起一般不出现。

换出是暂时调离内存,放在硬盘中,换入是被操作系统调入内存中,重新等待被执行。

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

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

相关文章

代码随想录算法训练营day50

文章目录 Day50买卖股票的最佳时机III题目思路代码 买卖股票的最佳时机IV题目思路代码 Day50 买卖股票的最佳时机III 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。…

P5724 【深基4.习5】求极差 / 最大跨度值

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​&#xff0c;求这 n n n 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示整数个数。 第二行输入 n n n 个整数 a 1 , a 2 … a n a_1,…

如何在Linux系统中使用yum命令安装MySQL

1、安装软件 # yum install -y https://repo.mysql.com//mysql80-community-release-el7-8.noarch.rpm # yum -y install mysql-community-server网址来源&#xff1a;https://dev.mysql.com/downloads/repo/yum/ 2、启动软件 # systemctl enable mysqld# systemctl start my…

如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

作者&#xff1a;双飞&#xff08;花名&#xff1a;小鱼&#xff09; 杭州电子科技大学在读硕士 StoneDB 内核研发实习生 ❝ 大家好&#xff0c;我是 StoneDB 的实习生小鱼&#xff0c;目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久&#xff0c…

解码“平台工程”,VMware 有备而来

随着全球数字化进程加快&#xff0c;企业使用前沿技术加快商业创新&#xff0c;以提高竞争力。其中如何加快开发效率&#xff0c;为客户创造更多价值成为新的关注焦点。 继DevOps后&#xff0c;“平台工程”&#xff08;Platform Engineering&#xff09; 一词引发热议。平台工…

MyBatis的使用方法

文章目录 一、MyBatis的创建准备工作 二、MyBatis的使用1.项目分层2.业务代码1&#xff09;使用XML的方法2&#xff09;直接使用注解 总结 一、MyBatis的创建 准备工作 1.添加依赖 旧项目 方法一&#xff1a;在pom.xml中添加MyBatis和MySQL Diver依赖 <!-- 添加 MyBati…

基于飞桨paddle波士顿房价预测练习模型测试代码

基于飞桨paddle波士顿房价预测练习模型测试代码 导入基础库 #paddle&#xff1a;飞桨的主库&#xff0c;paddle 根目录下保留了常用API的别名&#xff0c;当前包括&#xff1a;paddle.tensor、paddle.framework、paddle.device目录下的所有API&#xff1b; import paddle #Lin…

基于STM32的儿童误锁车内远程报警系统(华为云IOT)

一、项目背景 汽车发展历史汽车自上个世纪末诞生以来,已经走过了风风雨雨的一百多年。汽车经过百年历史的演变,已经在世界各地获得广泛的普及和应用,但是事物总会具有两面性,汽车方便了人们生活的同时也带来了不安全的因素。 儿童的出行和乘车安全始终都是我国现代汽车安…

Sentinel持久化规则

项目中有用到Sentinel,然后需要将Sentinel上配置的规则做持久化(或者初始化),通过改写Sentinel源码实现了需求,下面记录一下实现过程。 如果不知道Sentinel怎么搭,可以看看: 流控平台Sentinel搭建和接入教程_东皋长歌的博客-CSDN博客 一,背景 Sentinel是Alibaba开源…

信息技术会考操作题excel,信息技术会考操作题目

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;信息技术会考操作题python计算题&#xff0c;信息技术会考操作题没有保存&#xff0c;今天让我们一起来看看吧&#xff01; 1. 数据分析题&#xff08;17分&#xff09;&#xff1a; 流行病学通常关注单日治愈患者例数增…

@vue/composition-api功能介绍

前言 vue/composition-api 是通过一个插件的方式,为 Vue2&#xff08;2.7自带&#xff0c;2.6及以下可用&#xff09; 提供类似 Vue3 composition API 的函数式编程能力。它的实现思路主要有: 1、提供组合式函数,在函数内部追踪响应性依赖。 2、将组合产生的响应式状态保存到…

网络知识介绍

一、TCP 传输控制协议&#xff0c;Transmission Control Protocol。 面向广域网的通信协议&#xff0c;跨域多个网络通信时&#xff0c;为两个通信端点之间提供一条具有如下特点的通信方式&#xff1a; 基于流、面向连接、可靠通信方式、网络状况不佳时尽量降低系统由于重传带…

初识Linux

今天简单了解了关于操作系统的发展史&#xff0c;学习了在Linux中如何远程连接云服务器的指令&#xff0c;以及在Linux中创建多个用户的指令。 1. ssh root 服务器远程地址 作用是用来连接XShell与云服务器&#xff0c;输入该指令后会自动生成输入密码的窗口&#xff0c;如…

【产品经理】高阶产品如何处理需求?(3方法论+2案例+1清单)

不管你是萌新小白&#xff0c;还是工作了几年的“老油条”&#xff0c;需求一直是产品经理工作的重点。只不过&#xff0c;不同年限的产品经理需要面对的需求大有不同&#xff0c;对能力的要求更高。 不知你是否遇过以下问题&#xff1f; 你接手一个项目后&#xff0c;不知从何…

DID以及社交网络中的ZKP

1. 引言 本文关键术语为&#xff1a; Decentralized Identity (DID&#xff0c;去中心化身份) or self-sovereign identity (SSI&#xff0c;自治身份) &#xff1a;是一个基于开放标准的框架&#xff0c;使用自主、独立的标识符和可验证证书&#xff0c;实现可信的数据交换。…

九五从零开始的运维之路(其二十九)

文章目录 前言一、概述二、数据备份的重要性三、造成数据丢失的原因三、备份类型1.物理与逻辑角度&#xff08;一&#xff09;物理备份&#xff08;二&#xff09;逻辑备份 2.数据库备份策略角度&#xff08;一&#xff09;完整备份&#xff08;二&#xff09;增量备份 四、常见…

计算机视觉项目中的文件批量操作与文件批量预处理

计算机视觉项目中的文件批量操作与文件批量预处理 目录 数据集制作文件批量重命名文件批量移动将文件批量按照一定格式进行重命名修改xml文件内容的方法 引言 在计算机视觉项目中&#xff0c;文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件&am…

CentOS 上配置 NFS 服务器和客户端

部署 要在 CentOS 上配置 NFS 服务器和客户端&#xff0c;你可以按照以下步骤进行操作&#xff1a; 配置 NFS 服务器&#xff1a; 安装 NFS 服务器软件包&#xff1a; sudo yum install nfs-utils编辑 NFS 服务器配置文件 /etc/exports&#xff0c;添加要共享的目录和权限设置…

虹科案例|如何分析设备故障时间和次数,打破生产瓶颈?

虹科设备绩效管理系统 保障生产设备的稳定性和可靠性 生产设备的稳定性和可靠性是保证企业正常生产的重要条件之一&#xff0c;设备故障的频发严重影响企业的正常生产&#xff0c;那么如何分析设备故障时间和次数&#xff0c;查找设备故障原因&#xff0c;协助企业打破生产瓶…

python题-将多个Linux文件夹路径转换为JSON形式

要将多个Linux文件夹路径转换为JSON形式&#xff0c;我们可以使用一个字典来表示这个JSON结构。每个路径都是一个字符串&#xff0c;我们需要将其拆分成目录名&#xff0c;并将目录名按照层次结构组织成一个嵌套的字典。 思路如下&#xff1a; 遍历每个文件夹路径。将每个路径…