linux环境下进程相关概念解释

news2024/9/21 12:27:32

进程

  • 进程概念
  • PCB(Process control block)
  • 进程组织
  • 查看进程
    • ps 命令
    • getpid()/getppid()
    • kill -9 pid/ppid
    • fork()
      • 为什么fork会有两个返回值?
      • 为什么父进程返回子进程的PID,而子进程返回0?
  • linux下的进程状态
    • Z进程
    • 孤儿进程
  • 进程优先级
    • 查看优先级命令
    • 优先级参考值
    • 修改优先级

进程概念

进程:程序的一个执行实例,正在执行的程序等。
内核观点:担当分配系统资源(CPU时间,内存)的实体。
程序员观点:进程 = 对应的代码和数据 + 进程对应的PCB结构体

PCB(Process control block)

进程信息被放在一个叫做进程控制块(PCB)的数据结构中,即进程属性的集合。
在OS中,通过对PCB进行操作,从而达到控制程序运行的目的。

linux下的PCB结构体具体内容为:PCB具体内容。

进程组织

进程被组织进程管理,是以双链表的形式将PCB存在内核里。

查看进程

在linux里,查看正在运行的进程并不难。进程的运行状态信息,在根目录下的proc系统文件里。

如下:数字代表每个进程的ID号(PID)
在这里插入图片描述
proc里面存着所有进程的运行信息。

下面我们使用一个例子查看自己正在运行的进程:
在这里插入图片描述
持续运行该代码。
运行ps命令,可以查看当前运行的进程,PID号。

在这里插入图片描述

根据该PID即可查找到该文件,相关信息就存在里面。
在这里插入图片描述
其中cwd目录中,存储的就是当前程序运行的路径。
在这里插入图片描述

ps 命令

查看当前运行的进程,并显示运行进程的PPID,PID号等等。
用法: ps [选项]
选项:
a:显示所有用户的所有进程(包括其他用户)
j:用任务格式来显示进程
x:显示无控制终端的进程(后台运行)。
u:按用户名和启动时间顺序来显示进程。

显示结果的各个含义:
在这里插入图片描述

getpid()/getppid()

包含头文件<unistd.h>和<sys/types.h>

getpid()
获取当前进程的pid
getppid()
获取当前进程的父进程的ppid

在这里插入图片描述

kill -9 pid/ppid

使用该命令可以杀死进程。

fork()

创建一个子进程。


使用man fork时出现这个,提示:
在这里插入图片描述
缺少相关手册,输入以下命令即可解决。

yum install -y man-pages

为什么fork会有两个返回值?

根据man手册的介绍,创建成功后,会返回两个值。将子进程的PID号返回给父进程;将0返回给子进程。
在这里插入图片描述

#include<stdio.h>
#include<unistd.h>
int main ()
{
  pid_t id  = fork();
  if(id == 0)
  {
    //child
    while(1)
    {
      sleep(1);
      printf("I am a child,my pid:%d, ppid:%d\n",getpid(),getppid());
    }
  }
  else{
    //parent
    while(1)
    {
      sleep(1);
      printf("I am a parent,my pid:%d, ppid:%d\n",getpid(),getppid());
    }
  }

  //printf("hello world!\n");
  return 0;
}

运行结果:
在这里插入图片描述
ps命令查询父子进程ID号:
在这里插入图片描述

从该程序来看,该函数确实创建了一个子进程,并且if的两种情况都执行了。父进程执行else,子进程执行if。

原因:
因为子进程被创建后,fork后面的代码是父子进程都看的见的,而在fork函数return id前,子进程就已经被创建好了,父子进程都会执行return id语句因此看起来像一个变量两个值,本质上,是两个不同的进程,执行了同一段代码。

为什么父进程返回子进程的PID,而子进程返回0?

因为父进程可以创建多个子进程,返回子进程的PID方便父进程知道,我创建的孩子是谁,不至于变成野孩子;而子进程它自己知道自己是谁,当然也知道它的父亲是谁,因此子进程我们只需知道它创建成功即可,返回0就行。

linux下的进程状态

R(running): 运行状态,表明PCB要么在运行中,要么在运行队列。
S(sleeping):睡眠状态(阻塞状态),等待非CPU资源就绪,可中断睡眠。
D(Disk sleep):比如IO磁盘的时候的状态,不可中断睡眠。
T(stopped):暂停或调试状态
t(tracing stop):暂停或调试状态
X(dead):终止态,瞬时性非常强(OS释放资源很快)。
Z(zombie):僵尸状态,终止或异常状态,需要被CPU或父进程检查,检查完即可变到X。

可以在linux使用以下脚本命令,监控进程的状态:

 while :; do ps axj | head -1 && ps axj | grep ./my_test | grep -v grep; sleep 1; echo "-----------------------------------"; done

Z进程

僵尸进程是一个比较特殊的状态,当进程退出,并且父进程没有读取到子进程的返回代码时,就会产生僵死进程。僵死进程会一直以终止状态保持在进程表中,并且会一直等待父进程读取退出状态码。

僵尸进程危害:

  1. 进程的退出状态会一直被维持下去,因为它要等待父进程读取。
  2. 维护退出状态就是维护(PCB),也就是僵尸进程的PCB会一直在内存中。
  3. 父进程创建很多子进程,就是会不回收,就会造成内存资源浪费。

孤儿进程

和Z进程产生情况相反,如果父进程先退出,子进程就会变成孤儿进程。因为父进程都没有了,没人释放它了,就变成孤儿了。
为了解决这种问题,孤儿进程会被领养,被1号进程领养(init),就是被系统本身领养。以后1号进程会自动回收子进程。

进程优先级

CPU分配资源是有先后顺序的,就是指进程的优先权。优先权高的进程先分配资源,优先权低的后分配资源。
进程能否上CPU执行,是受进程调度器调度的,而优先级是进程调度器的主要参考依据。

查看优先级命令

ps -al

在这里插入图片描述

优先级参考值

PRI(priority):代表这个进程被执行的优先级,值越小越早被执行。
NI(nice):代表这个进程的nice值(可以被修改)。

优先级(PRI) = 默认优先级的值(PRI) + nice值(NI)

注意:

  1. nice值不是进程的优先级,但是nice值的改变会影响进程的优先级。
  2. 默认的PRI为80。
  3. nice的取值范围是:-20~19,一共40个级别。

修改优先级

使用top命令可以修改进程的优先级。

  • top -> r -> 输入PID -> 输入nice值。

以上就是进程相关概念,后续还会继续补充。

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

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

相关文章

新风机小助手-风压变速器

风压变速器是一种用于调节系统中风量和风压的装置&#xff0c;常用于通风系统中。它通过改变进出风口的开度来调整风流的速度和风压。 风压变速器通常由进出风口和可调节的风门组成。风门可以手动或自动调节&#xff0c;控制进出风口的开度&#xff0c;从而改变风量和风压。根据…

数据结构和算法概述

什么是数据结构&#xff1f; 官方解释&#xff1a; 数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及他们之间的关系和操作等相关问题的学科。 大白话&#xff1a; 数据结构就是把数据元素按照一定的关系组织起来的集合&#xff0c;用来组织和存储…

CSC联合培养|公共管理博士赴世界名校瑞士苏黎世联邦理工学院

A同学拟申报CSC联合培养博士项目&#xff0c;要求到专业契合的世界知名高校。最终我们用世界大学排名第7的瑞士苏黎世联邦理工学院邀请函&#xff0c;助其顺利获批CSC&#xff0c;并如期出国。 A同学背景&#xff1a; 申请类型&#xff1a; CSC联合培养博士 工作背景&#xf…

mysql查询最近7天 每天销售额 统计销售额

sql统计每一天的支出数目&#xff0c;支出金额&#xff0c;收入数目&#xff0c;收入金额 finance_type0&#xff1a;收入 finance_type1&#xff1a;支出 部分建表语句&#xff1a; CREATE TABLE finance (finance_id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,finance_u…

Unity 项目中查找仅具有单一颜色的纹理

如何使用 只需在“项目”窗口中创建一个名为“编辑器”的文件夹&#xff0c;然后在其中添加此脚本即可。然后&#xff0c;打开“窗口-单色纹理检测器”并点击“刷新”。 你可能会问&#xff0c;为什么我需要这个&#xff1f;某些纹理可以是 1024x1024 或更大&#xff0c;并且…

PHPstorm 安装汉化包失败解决方法

出错的原因是官方的包和软件的版本不对应&#xff0c;下载对应的汉化包就行了 官网汉化包下载地址https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions 下载对应ide版本的包&#xff0c;我下载了一个2020版的 放到安装软件的plugins文…

纺织辅料经营小程序商城的作用是什么

数字化时代&#xff0c;各个行业都在通过线上转型实现新增长&#xff0c;纺织辅料厂商也一样&#xff0c;需要通过线上化实现与客户的面对面交流有利于打造品牌及构建私有化流量池&#xff0c;但无论入驻哪家电商平台及垂直行业平台&#xff0c;都有不少的佣金及入驻费。 可通过…

h750错误记录 卡死 ,18b20数据读取失败 解决办法

1.程序运行没反应 &#xff0c;debug发现卡死到 b. **> 解决办法&#xff0c;中断函数缺失&#xff0c;添加即可 2.stm32h750对18b20 读取数据失败 由于hal库没有 微秒延时&#xff0c;故采用nop&#xff08; &#xff09;函数来进行延时&#xff0c;死活读不到温度数据&…

UG\NX二次开发 分享“一键清除高亮工具”的源代码

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 Trust_MJ 订阅本专栏,非常感谢。 简介 一键清除高亮工具,这个工具怎么开发呢?遍历对象使用UF_DISP_set_highlight()吗?下面分享一种最简单的方法: 效果…

跨境电商必备指南:教你轻松玩转Facebook聊单

Facebook作为全球最大的社交媒体平台之一&#xff0c;拥有数十亿的用户。这样庞大的客户群体为出海企业营销提供了巨大的潜力&#xff0c;无论是中小型的企业还是大型的跨国公司&#xff0c;Facebook都是一个有助于建立品牌形象的平台。企业可以在上面与用户互动、推广产品和服…

抄表系统是如何抄到电表水表的数据的?

抄表系统是一种利用无线通信技术&#xff0c;实现远程读取电表水表数据的系统。抄表系统主要由三部分组成&#xff1a;电表水表、集中器和后台管理平台。接下来&#xff0c;小编来为大家详细的介绍下抄表系统是如何抄到电表水表的数据的&#xff0c;一起来看下吧! 电表水表是抄…

餐饮外卖小程序商城的作用是什么

随着互联网及线上餐饮的发展趋势&#xff0c;行业洗牌正在加速&#xff0c;并且对餐饮连锁门店提出更高要求&#xff0c;餐饮数字化转型加快&#xff0c;积极发展线上经营是不少餐饮商家的首选。这其中&#xff0c;餐饮外卖商城成为很多餐饮品牌的线上经营品牌&#xff0c;也是…

k8s客户端配置

K8s客户端安装 前提 K8s服务部署成功&#xff0c;如下 角色 IP地址 操作系统 主机名 Kubernetes版本 master节点 172.16.4.167 CentOS 7.9 k8s-master01 v1.28.2 工作节点1 172.16.4.168 CentOS 7.9 k8s-worker01 v1.28.2 工作节点2 172.16.4.169 CentOS 7.9…

【蓝桥】通关

1、题目 问题描述 游戏“蓝桥争霸”由很多关卡和副本组成&#xff0c;每一关可以抽象为一个节点&#xff0c;整个游戏的关卡可以抽象为一棵树形图&#xff0c;每一关会有一道算法题&#xff0c;只有当经验值不低于第 i i i 关的要求 k i k_i ki​ 时&#xff0c;小蓝才能挑…

SAP-怎么查一个工艺路线抬头特性值用在了哪个工艺路线里

起因 在DEV里写了个报表&#xff0c;用生产订单关联工艺路线&#xff0c;关联特性值的时候发现特性值维护的和PRD里不一样&#xff0c;PRD里&#xff0c;这个特性值在“值”标签里定义了选项&#xff0c;而DEV里却没有&#xff0c;于是乎就想把它补过来。然而保存存的时候报错…

Echarts 实现 设备运行状态图(甘特图) 工业大数据展示

let option{tooltip: {formatter: function (params) {let startTime new Date(params.value[1])let endTime new Date(params.value[2]);//北京时间/时间戳转成日常时间function convert(date){var y date.getFullYear();var m date.getMonth() 1;m m < 10 ? "0…

基于边缘智能网关的储能系统安全监测管理方案

“储能系统充电”是配套新能源汽车产业发展的重要应用之一。得益于电池技术的发展&#xff0c;新能源汽车正逐步迈入快充时代&#xff0c;由于在使用快速充电桩时&#xff0c;可能导致用电峰值负荷超过电网的承载能力&#xff0c;对于电网的稳定性和持续性会有较大影响&#xf…

【智能大数据分析】实验1 MapReduce实验:单词计数

【智能大数据分析】实验1 MapReduce实验&#xff1a;单词计数 文章目录 【智能大数据分析】实验1 MapReduce实验&#xff1a;单词计数一、实验目的二、实验要求三、实验原理1 MapReduce编程2 Java API解析 四、实验步骤1 启动Hadoop2 验证HDFS上没有wordcount的文件夹3 上传数据…

云安全-对象存储安全(配置错误,域名接管,AK泄露)

0x00 云安全-对象存储 云安全厂商分类&#xff1a;阿里云&#xff0c;腾讯云&#xff0c;华为云&#xff0c;亚马逊云等 云厂商所对应的云服务包括&#xff1a;对象存储&#xff0c;云数据库&#xff0c;弹性计算服务&#xff08;云主机&#xff09;&#xff0c;云控制台 各厂…

桃花峪滑雪场租赁系统 JAVA开源项目 毕业设计

目录 项目介绍 项目下载 项目截图 项目介绍 基于JAVAVueSpringBootMySQL的桃花峪滑雪场租赁系统&#xff0c;包含了滑雪场、门票预定、滑雪教练聘请、器材租赁归还、规章制度等模块&#xff0c;分为管理后台和微信小程序端&#xff0c;还包含系统自带的用户管理、部门管理、…