进程相关内容

进程内容

    • 进程类型
    • 守护进程
    • 进程的概念
    • 查看进程信息
    • 父子进程
    • 创建子进程
    • 进程结束 – exit/_exit
    • 进程回收 –wait waitpid

进程类型

交互进程 (Interactive Process)
交互进程是由用户通过终端或图形界面直接启动的进程,例如我们在命令行输入的命令。它通常需要等待用户的输入,并在执行完成后直接返回输出。交互进程可以在前台或后台运行,前台的交互进程会占用终端,而后台进程不会阻塞终端。

批处理进程 (Batch Process)
批处理进程是按照调度器设定的时间批量执行的任务,不需要用户直接交互。它们通常由作业调度器 (如cron) 启动,以自动化运行一些任务。批处理进程在后台安静地执行任务,适用于需要定期或批量处理的任务,例如备份、日志处理等。

守护进程 (Daemon Process)
守护进程是一种在后台运行的长期服务进程,它们不与用户直接交互,通常在系统启动时自动启动。守护进程为系统提供各种服务,如网络服务 (如sshd)、文件系统服务 (如nfsd)、打印服务 (如cupsd) 等。守护进程的父进程通常是init (PID为1),以确保它们不会因为其他进程的终止而被意外杀死。

自己编辑的程序在运行时会成为一个 交互进程 或 批处理进程,具体取决于它是如何启动和运行的:

交互进程:

如果你在命令行中直接运行这个程序,例如通过 ./fb_display 启动,那么它就是一个交互进程,因为它是通过终端启动的并与用户交互。它会在运行完成后返回控制权给终端。

批处理进程:

如果你将程序配置为定时任务,让它自动运行(例如通过 cron 定时执行),那么它会成为一个批处理进程,因为它的执行是自动化的,不需要用户的实时操作或交互。

守护进程(可选):

如果你希望这个程序在后台持续运行并周期性地刷新屏幕(例如每隔几秒或几分钟自动更新帧缓冲区),则可以将它改写为一个守护进程,使它始终在后台运行。

守护进程

在这里插入图片描述

进程组(Process Group): 进程集合,每个进程组有一个组长(Leader),其进程 ID 就是该进程组 ID。

会话(Session): 进程组集合,每个会话有一个组长,其进程 ID 就是该会话组 ID。

控制终端(Controlling Terminal):每个会话可以有一个单独的控制终端,与控制终端连接的 Leader 就是控制进程(Controlling Process)。

进程的概念

在这里插入图片描述
BSS段:BSS段通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。
数据段:数据段通常是指用来存放程序中已初始化的全局变量的一块内存区域。
代码段:代码段通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
堆(heap):堆是用于存放进程运行中被动态分配的内存段,当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

查看进程信息

ps -el在这里插入图片描述

ps -elf

F:表示进程的标志 (flags),用于描述进程的状态和属性。
S:表示进程状态,通常用单个字母表示,例如:
R:运行中(Running)。
S:睡眠(Sleeping)。
D:不可中断睡眠(通常用于 I/O 操作)。
Z:僵尸进程(Zombie)。
T:停止(Stopped)。
UID:启动该进程的用户 ID。
PID:进程 ID,用于唯一标识每个进程。
PPID:父进程 ID,即启动当前进程的进程的 ID。
C:CPU 使用率的百分比。
PRI:优先级 (priority),数值越小,优先级越高。
NI:调整优先级的 nice 值,值越小表示优先级越高。
ADDR:表示内存地址,通常用于调试目的。
SZ:进程所占用的虚拟内存大小,以 KB 为单位。
WCHAN:进程当前正在等待的内核函数。
STIME:进程启动的时间。
TTY:进程的终端名称,若没有控制终端,则显示为 ?。
TIME:进程使用的 CPU 时间总量。
CMD:启动该进程的命令和参数。

top 查看进程动态信息
在这里插入图片描述

ctrl+z 把运行的前台进程转为后台并停止。
./test & 把test程序后台运行
jobs 查看后台进程
bg 将挂起的进程在后台运行
fg 把后台运行的进程放到前台运行
在这里插入图片描述

父子进程

要点:
1 子进程只执行fork之后的代码
2.父子进程执行顺序是操作系统决定的。

子进程继承了父进程的内容
父子进程有独立的地址空间,互不影响

若父进程先结束
子进程成为孤儿进程,被init进程收养
子进程变成后台进程
若子进程先结束
父进程如果没有及时回收,子进程变成僵尸进程

创建子进程

#include <unistd.h>
pid_t fork(void);

创建新的进程,失败时返回-1
成功时父进程返回子进程的进程号,子进程返回0
通过fork的返回值区分父进程和子进程

  pid_t  pid;if ((pid = fork()) < 0) {perror(“fork”);  return -1;}else  if (pid == 0) {printf(“child  process :  my pid  is %d\n”, getpid());}else {printf(“parent  process :  my pid  is  %d\n”, getpid());}  

进程结束 – exit/_exit

#include <stdlib.h>
#include <unistd.h>
void exit(int status);
void _exit(int status);
void _Exit(int status);
结束当前的进程并将status返回
exit结束进程时会刷新(流)缓冲区

进程回收 –wait waitpid

#include <sys/wait.h>
pid_t wait(int *status);
成功时返回回收的子进程的进程号;失败时返回EOF
若子进程没有结束,父进程一直阻塞
若有多个子进程,哪个先结束就先回收
status 指定保存子进程返回值结束方式的地址
status为NULL表示直接释放子进程PCB,不接收返回值

#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int option);

成功时返回回收的子进程的pid或0;失败时返回EOF
pid可用于指定回收哪个子进程或任意子进程
status指定用于保存子进程返回值和结束方式的地址
option指定回收方式,0 或 WNOHANG 阻塞和不阻塞

进程返回值和结束方式

WIFEXITED(status)
判断子进程是否正常结束
WEXITSTATUS(status)
获取子进程返回值
WIFSIGNALED(status)
判断子进程是否被信号结束
WTERMSIG(status)
获取结束子进程的信号类型

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

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

相关文章

石墨舟氮气柜:半导体制造中的关键保护设备

石墨舟是由高纯度石墨材料制成的&#xff0c;主要用于承载硅片或其他基板材料通过高温处理过程&#xff0c;是制造半导体器件和太阳能电池片的关键设备之一。 石墨舟在空气中容易与氧气发生反应&#xff0c;尤其是在高温处理后&#xff0c;表面可能更为敏感&#xff1b;石墨舟具…

rabbitMq双节点高可用集群安装(亲测可用)

查询系统版本 cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) rabbitmq v3.9.13 &#xff08;centos7支持比较大的版本了&#xff0c;后面版本貌似都是centos8以上&#xff09; erlang erlang-23.3.4.11-1.el7.x86_64 &#xff08;需要和rabbitmq版本匹配&…

简单介绍一下mvvm mvc mvp以及区别、历史

MVC&#xff08;Model - View - Controller&#xff09; 因MVC架构的灵活性&#xff0c;架构图形式很多&#xff0c;仅供参考 历史&#xff1a; MVC 是最早出现的软件架构模式之一&#xff0c;其历史可以追溯到 20 世纪 70 年代&#xff0c;最初被用于 Smalltalk - 80 环境。…

Nordic SoftDevice蓝牙主机操作流程

Nordic SoftDevice蓝牙主机操作流程 之前学习nordic的nus client 主机例程时做了些笔记&#xff0c;现在有空重新整理了一下发出来。 NRF_SDH_BLE_OBSERVER 宏介绍 这个宏可以设置多个BLE事件的回调函数&#xff0c;并按设置的优先级依次执行。这么一来&#xff0c;就可以将…

C++生成高斯分布随机数

简单实现 在 C 中&#xff0c;可以使用 头文件中的功能来生成正态分布&#xff08;高斯分布&#xff09;随机数。以下是一个示例&#xff0c;展示如何使用 C11 及以上版本的标准库生成正态分布随机数。 #include <iostream> #include <random> #include <cmat…

SL6115降压恒流 60V降压恒流芯片,高精度1%,PWM模拟调光

一、核心参数与性能 工作电压范围&#xff1a;5.5V至60V&#xff0c;宽输入电压范围使其能够适应多种应用场景。 最大输出电流&#xff1a;根据公开发布的信息&#xff0c;SL6115的最大输出电流可达到1.2A至1.5A&#xff0c;具体取决于不同版本或制造商的规格说明。这一高输出…

lnmp:自己的“百度网盘”

一、项目简介 有人会问&#xff0c;什么是lnmp储存&#xff0c;相信大家都用过百度网盘&#xff0c;他的原理和lnmp的作用相同&#xff0c;都是将数据储存在私有云中。LNMP也是用来储存自己的数据&#xff0c;可以假象成这是一个属于自己的数据库。 二、详细概述 所谓LNMP便是…

「实战应用」如何用图表控件LightningChart .NET在WPF中制作表格?(一)

LightningChart .NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科…

鸿蒙进阶篇-网格布局 Grid/GridItem(二)

hello大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天让我们来继续学习鸿蒙进阶篇-网格布局 Grid/GridItem&#xff0c;上一篇博文我们已经学习了固定行列、合并行列和设置滚动&#xff0c;这一篇我们将继续学习Grid的用法&#xff0c;实现翻页滚动、自定义滚动条样式&…

SpringBoot框架:共享汽车管理的创新工具

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 共享汽车管理系统的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 投放地区管理 系统管理员可以对投放地区信息进行添加&#…

uniapp上拉刷新下拉加载

方法一&#xff1a; z-paging 的组件库&#xff1a; show-loading-more-no-more-view"false" 该属性控制是否显示 "加载更多" 或 "没有更多" 的提示。如果设为 false&#xff0c;则不会显示这些提示。如果设为 true&#xff0c;当数据加载完毕…

【Pikachu靶场:XSS系列】xss之过滤,xss之htmlspecialchars,xss之herf输出,xss之js输出通关啦

一、xss之过滤 <svg onloadalert("过关啦")> 二、xss之htmlspecialchars javascript:alert(123) 原理&#xff1a;输入测试文本为herf的属性值和内容值&#xff0c;所以转换思路直接变为js代码OK了 三、xss之href输出 JavaScript:alert(假客套) 原理&#x…

微分段如何防止勒索软件攻击

微分段通过隔离关键资产、限制网络横向移动、提供细粒度的最小特权访问、实现快速隔离、简化恢复、提高网络弹性以及减少爆炸半径来防止勒索软件攻击。 勒索软件攻击已成为各种规模的组织面临的越来越危险的威胁。 勒索软件利用横向移动技术来感染和加密尽可能多的端点和服务…

后端Node学习项目-项目基础搭建

前言 各位好&#xff0c;我是前端SkyRain。最近为了响应公司号召&#xff0c;开始对后端知识的学习&#xff0c;作为纯粹小白&#xff0c;记录下每一步的操作流程。 项目仓库&#xff1a;https://gitee.com/sky-rain-drht/drht-node 因为写了文档&#xff0c;代码里注释不是很…

SQL server 中 CROSS APPLY的使用

CROSS APPLY 是 SQL Server 中的一个操作符&#xff0c;用于将一个表表达式&#xff08;如子查询、函数等&#xff09;与外部表进行连接。CROSS APPLY 类似于 INNER JOIN&#xff0c;但它允许你在一个查询中多次引用外部表的行&#xff0c;并且可以动态地生成结果集。 基本语法…

低空经济之星eVTOL研发技术详解

低空经济之星eVTOL&#xff08;Electric Vertical Take-off and Landing&#xff09;是一种采用储能电池、电机驱动以及螺旋桨推进方式&#xff0c;并具备垂直起降功能的新型航空器。以下是对eVTOL研发技术的详解&#xff1a; 一、技术特点 1. 分布式推进系统 结构简单性与轻…

算法每日双题精讲——双指针(快乐数,盛最多水的容器)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#xff01;&#x1f4aa;…

【c++ gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试

【c gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试 下载谷歌提供的c测试库在VsCode中安装抖音AI大模型找到c项目文件夹&#xff0c;使用VsCode和VS进行双开生成gtest代码进行c单例测试 下载谷歌提供的c测试库 在谷歌浏览器搜索github gtest, 第…

数据库SQLite的使用

SQLite是一个C语言库&#xff0c;实现了一个小型、快速、独立、高可靠性、功能齐全的SQL数据库引擎。SQLite文件格式稳定、跨平台且向后兼容。SQLite源代码属于公共领域(public-domain)&#xff0c;任何人都可以免费将其用于任何目的。源码地址&#xff1a;https://github.com/…

【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 官方信息 会议官网&#xff1a;www.icbar.net 2024 4th International Conference on Big Data, Art…