进程状态|进程优先级

news2024/10/12 2:49:01

目录

一、进程状态

1.什么是进程状态

2.进程状态都包含什么?

3.进程状态的查看

4.进程退出

(1)进程退出的步骤

(2)僵尸进程

(3)孤儿进程

二、进程优先级

1.进程优先级是什么?

2.为什么要有进程优先级?

3.查看进程优先级

4.进程优先级的修改

(1)为什么nice值范围只有[-20,19]?

(2)进程优先级由什么元素构成?

(3)修改进程优先级的指令


一、进程状态

1.什么是进程状态

  • 进程状态是指进程在执行过程中的不同情况或阶段,这些状态反映了进程的生命周期和当前的活动情况。进程状态可以随着进程的执行和外界条件的变化而转换。

2.进程状态都包含什么?

  • 进程状态在kernel源代码中的定义:
/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
  • R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里
  • S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠 (interruptible sleep))
  • D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束
  • T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行
  • X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态

3.进程状态的查看

4.进程退出

(1)进程退出的步骤

  • 进程=内部数据结构(task_struct)+代码数据
  1. 进程不再执行后,首先释放代码和数据
  2. 进程退出,退出信息(退出码)保存在task_struct中
  3. 管理结构task_struct必须被OS维护,方便用户来获取

(2)僵尸进程

  • 子进程退出,父进程不作操作
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
	pid_t id = fork();
	if(id < 0)
	{
		perror("fork");
		exit(1);
	}
	if(id > 0)
	{
		printf("parent[%d]is sleeping...\n",getpid());
		sleep(30);
	}
	else
	{
		printf("child[%d]is begin Z...\n",getpid());
		sleep(5);
		exit(EXIT_SUCCESS);
	}
	return 0;
}

循环查看进程的指令

 while :; do ps axj | head -1; ps axj | grep [僵尸进程];sleep 1;done

结果展示

  • 由上图可以看到,父进程的pid为2911783,子进程的pid为2911784
  • 由下图可以看到,父进程休眠30秒进入S+的睡眠状态,子进程休眠5秒后退出进程,则子进程状态是Z+的僵尸状态,并带上了<defunct>后缀

(3)孤儿进程

  • 父进程退出,bash维护退出信息,子进程被系统自动领养
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
        pid_t id = fork();
        if(id < 0)
        {
                perror("fork");
                exit(1);
        }
        if(id > 0)
        {
                printf("parent[%d]is sleeping...\n",getpid());
                sleep(30);
        }
        else
        {
                printf("child[%d]is begin Z...\n",getpid());
                sleep(5);
                exit(EXIT_SUCCESS);
        }
        return 0;
}

 结果展示

  • 这里可以看到,父进程pid为2927931,子进程pid为2927932,当父进程退出后,子进程的ppid由原来的2927931变为1,即子进程被系统自动领养(system)

二、进程优先级

1.进程优先级是什么?

  • 进程优先级(Process Priority)是操作系统用来决定哪个进程应该优先获得CPU资源的一种机制。操作系统通过分配不同的优先级给进程,以优化系统性能和响应速度。高优先级的进程通常会被操作系统更频繁地调度执行,而低优先级的进程则可能等待更长的时间

2.为什么要有进程优先级?

  • CPU目标资源有限,进程之间需要竞争CPU资源(僧多粥少),程优先级的存在是为了优化操作系统的资源分配,提高系统的响应速度、稳定性和资源利用率,同时实现任务之间的公平性和防止资源饥饿

3.查看进程优先级

  • 查看进程优先级的指令
    ps -al

其中:

UID是指用户ID(可使用ls -ln查看)

PID是指用户进程pid

PPID是指用户父进程id

PRI是指进程最终优先级,PRI=pir + nice值

NI是指进程nice值

4.进程优先级的修改

(1)为什么nice值范围只有[-20,19]?

  • 将nice值设定在一个有限的范围内[-20到19],可以确保优先级的划分既足够细致以满足不同任务的需求,又不会过于复杂以至于难以管理。通过限制nice值的范围,操作系统可以更好地平衡各个进程对资源的需求,确保系统能够稳定运行。将nice值范围设定为-20到19,可以为系统管理员提供一个明确的界限,以便他们更好地控制和管理用户对进程优先级的调整。

(2)进程优先级由什么元素构成?

  • 在用户空间中,进程优先级通常通过nice值或scheduling priority来表示。nice值是一个用户可调整的参数,用于改变进程获取CPU资源的比例。而scheduling priority则用于实时进程,表示其相对于其他进程的优先级

最终优先级=pri+nice

(3)修改进程优先级的指令

top/r/[PID]/[改nice值]    [-20,19]

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

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

相关文章

二分查找一>0~n-1中缺失的数字(点名)

1.题目&#xff1a; 2.解析&#xff1a;方法一&#xff1a;用哈希表&#xff1a;记录存在的数字&#xff0c;找到哈希表为空的数字输出 Set<Integer> set new HashSet<>();for(int x : records) set.add(x);for(int i 0; i < set.size(); i){if(!set.contain…

重新学习Mysql数据库3:Mysql存储引擎与数据存储原理

本文转自互联网 本系列文章将整理到我在GitHub上的《Java面试指南》仓库&#xff0c;更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客&#xff1a; www.how2playlife.com 本文是微信公众号【Java技术江湖…

STM32与QT实现串口传输结构体含源码

文章目录 一. 关于数据传输的方式1.1 基本数据类型传输1.2 结构体传输 二. STM32与QT实现串口传输结构体实例2.1 下位机的实现2.2 上位机的实现2.3 演示Demo 三. 注意事项3.1 关于字节对齐问题3.2 关于大小端问题 一. 关于数据传输的方式 在日常开发过程中&#xff0c;我们时常…

使用aloam跑hesai Pandar-XT32激光雷达数据

参考自利用aloam跑数据集_aloam数据集-CSDN博客 第一步&#xff1a;查看bag的信息 输入rosbag info来查看bag包的信息&#xff1a; joeyjoey-Legion-Y7000P-IRX9:~$ rosbag info /home/joey/Downloads/data2022/indoor/LiDAR_IMU.bag path: /home/joey/Downloads/da…

Java_EE 多线程技术(Thread)

多线程与并发编程 多线程介绍什么是程序&#xff1f;程序&#xff08;Program&#xff09;是一个静态的概念&#xff0c;一般对应于操作系统中的一个可执行文件。什么是进程?执行中的程序叫做进程(Process)&#xff0c;是一个动态的概念。其实进程就是一个在内存中独立运行的程…

2025秋招倒计时---招联金融

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

股市期市内外盘高频分钟tick及均线策略分享

【数据库】银河金融数据库&#xff08;yinhedata.com&#xff09;可以获取大量历史行情数据&#xff0c;包含分钟&#xff0c;tick&#xff0c;日。不限于国内外&#xff0c;股票期货基金&#xff0c;ETF、期权等 【策略分享】一、引言均线策略作为技术分析的重要工具&#xff…

Kubesphere4.1插件网关、devops控制页面白页面问题解决

在使用Kubesphere4.1版本时&#xff0c;安装完成devops插件后‘DevOps项目’管理页面出现白页面&#xff0c;无法进行配置。包括网关等控制页面都会出现白页面。 经过查看版本信息发现是4.1版本存在问题&#xff0c;目前不支持。 处理问题&#xff1a; 目前 Kubesphere发布了4…

【软件测试】最佳软件测试基础入门教程

目录 前言一、顺序式开发模型二、 瀑布模型三 、V型模型四、迭代和增量开发模型五、 项目和产品背景下的软件开发 前言 软件开发生命周期的测试 本章简要介绍了软件开发项目中常用的生命周期模型&#xff0c;并解释了测试在每个模型中扮演的角色。它讨论了各种测试级别和测试…

python-PyQt项目实战案例:制作一个简单的图像处理工具

文章目录 1.设计UI2.编写功能代码2.1 初始化ui界面及类成员参数2.2 添加菜单栏2.3 建立信号/槽连接 3.主要功能代码及效果4.设置图像自动调节长宽尺寸但不改变长宽比例参考文献 1.设计UI 对于UI的设计可以通过qt designer直接绘制&#xff0c;也可以通过编写python代码实现。当…

10万+收藏!10万转发!AI绘画如何助力育儿赛道引爆短视频平台?

在自媒体领域&#xff0c;内容创作的竞争日益激烈&#xff0c;但育儿自媒体一直是一块热门且持久的“金矿”&#xff0c;吸引了无数创作者投身其中。然而&#xff0c;如何在这片红海中脱颖而出&#xff0c;成为了许多创作者面临的难题。而AI绘画的出现&#xff0c;无疑解决了创…

约束使用方法:

设置主键&#xff1a; 该列的值用来唯一标识表中每一行&#xff0c;用于强制表的实体完整性。这样的列定义为表的主键&#xff0c;也就是说主键的列中不允许有相同的数据。 设置默认&#xff1a; CREATE TABLE pet( #not null 非空 ZEROFILL 补零 先补零&#xff0c;在非空 id…

解锁机器人视觉与人工智能的潜力,从“盲人机器”改造成有视觉能力的机器人(上)

正如人类依赖眼睛和大脑来解读世界&#xff0c;机器人也需要自己的视觉系统来有效运作。没有视觉&#xff0c;机器人就如同蒙上双眼的人类&#xff0c;仅能执行预编程的命令&#xff0c;容易碰撞障碍物&#xff0c;并犯下代价高昂的错误。这正是机器人视觉发挥作用的地方&#…

k8s1.27部署ingress 1.11.2

k8s1.27部署ingress 1.11.2 要求&#xff1a; 1、使用主机网络。 2、多节点部署&#xff0c;以来标签&#xff1a;isingressistrue ingress1.11.2支持版本 官方参考链接&#xff1a; https://github.com/kubernetes/ingress-nginx/ 官网yaml https://raw.githubuserconten…

DYNPRO_SYNTAX_ERROR 主屏幕调用子屏幕,程序运行时错误

文章目录 问题描述问题查找和解决 问题描述 问题查找和解决

比特币社区心心念念的BTCFi进展如何了?——比特币与DeFi的未来

比特币在去中心化金融&#xff08;DeFi&#xff09;中的角色正在发生深刻变革。作为全球首个加密货币&#xff0c;比特币的主要用途从最初的点对点支付正逐渐转向更复杂的金融应用。通过BTCFi&#xff08;比特币与DeFi的结合&#xff09;&#xff0c;比特币生态系统正加速崛起&…

QD1-P16 HTML 按钮标签(button)

本节学习 HTML 常用标签&#xff1a;button ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p16 ‍ ​<button>​ 标签在 HTML 中用于创建按钮&#xff0c;它是一个交互式元素&#xff0c;通常用于提交表单或触发某个脚本。以下是 <button>​ 标签的一些基本…

基于FPGA的DDS信号发生器(图文并茂+深度原理解析)

篇幅有限&#xff0c;本文详细源文件已打包 至个人主页资源&#xff0c;需要自取...... 前言 DDS&#xff08;直接数字合成&#xff09;技术是先进的频率合成手段&#xff0c;在数字信号处理与硬件实现领域作用关键。它因低成本、低功耗、高分辨率以及快速转换时间等优点备受认…

C++ stack和queue的使用介绍和模拟实现

内容摘要&#xff1a; 本文介绍了stack和queue的构造函数和一些成员函数&#xff0c;并模拟实现了stack和queue&#xff0c;分析了为什么选择deque作为适配器默认封装的对象 stack的介绍 栈是只能够在一端进行插入和删除的&#xff0c;这就是我们一直常说的“后进先出”&#x…

未来10年,哪些行业将被AI彻底颠覆?

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;许多行业的工作方式正在发生显著变化。一些原本依赖人工处理的任务&#xff0c;正逐渐由AI接手并优化。在未来&#xff0c;AI将不仅仅是辅助工具&#xff0c;它可能会彻底改变某些行业的运作模式&#xff0c;…