当前位置: 首页 > news >正文

Linux编程3.3 进程-进程的终止

1、正常终止

  • 从main函数返回
  • 调用exit(标准C库函数)
  • 调用_exti或_Exit(系统调用)
  • 最后一个线程从其启动例程返回
  • 最后一个线程调用 pthread exit

2、异常终止

  • 调用abort
  • 接受到一个信号并终止
  • 最后一个线程对取消请求做处理响应

3、进程返回

  • 通常程序运行成功返回0,否则返回非0
  • 在shll中可以查看进程返回值(echo $?)

4、atexit函数

#include<stdlib.h>
int atexit(void (*function)(void));
返回:成功返回0,出错返回-1
功能:向内核登记终止函数
  • 每个启动的进程都默认登记了一个标准的终止函数
  • 终止函数在进程终止时释放进程所占用的一些资源
  • 登记的多个终止函数执行顺序是以栈的方式执行,先登记的后执行。

 示例:

 

5、进程终止方式区别

return

exit()

_exit()/Exit()

是否刷新标准I/O缓存

是否自动调用终止函数

6、进程启动和退出

   

7、查看系统中的进程

7.1、ps指令

通常可以查看到:进程的ID、进程的用户ID、进程状态和进程的Command

示例:

ps -ef

ps -aux|more 查看进程资源占用情况

7.2、ps输出的信息

  • USER            进程的属主;
  • PID              进程的ID;
  • PPID              父进程的ID;
  • %CPU             进程占用的CPU百分比;
  • %MEM            占用内存的百分比;
  • NI                  进程的NICE值,数值大,表示较少占用CPU时间;
  • VSZ               进程虚拟大小;
  • RSS                驻留中页的数量;
  • TTY                终端ID;
  • WCHAN        正在等待的进程资源;
  • START            启动进程的时间;
  • TIME              进程消耗CPU的时间;
  • COMMAND 命令的名称和参数;

7.3、进程状态

进程常见状态:

  • 运行状态
    1. 系统当前进程
    2. 就绪状态进程
    3. ps命令的STAT列为值R
  • 等待状态
    1. 等待事件性
    2. 等待系统资源
    3. ps命令的STAT列为值S
  • 停止状态
    1. ps命令的STAT列为值T
  • 僵尸状态
    1. 进程终止或结束
    2. 在进程表项中仍有记录
    3. ps命令的STAT列为值Z

8、进程调度

8.1、操作步骤

  • 第一步:处理内核中的工作
  • 第二步:处理当前进程
  • 第三步:选择进程
    1. 实时进程
    2. 普通进程
  • 第四步:进程交换

8.2、task_struct中的调度信息:

  • 策略
    1. 轮流策略
    2. 先进先出策略
  • 优先权
    1. Jiffies变量
  • 实时优先权
    1. 实时进程之间
  • 计数器

8.3、进程状态变化关系

 

9、回收方式:

              1. init进程回收 -> 僵尸进程 孤儿进程

              2. wait函数回收 -> 阻塞 等待SIGCHLD信号

              3. signal信号回收->当子进程结束,内核会发射SIGCHLD信号到对应的父进程中。

(signal信号:linux内核当中,有若干种信号,比如SIGINT,SIGCHLD,SIGALRM……,内核中,会产生或监听若干信号,若一个进程,监听了一个信号,则当发生该信号时,此进程会将当前进度暂停。     SIGINT->ctrl +c),

注:Sleep函数会被信号唤醒

相关文章:

Linux编程3.3 进程-进程的终止

1、正常终止 从main函数返回调用exit(标准C库函数)调用_exti或_Exit&#xff08;系统调用&#xff09;最后一个线程从其启动例程返回最后一个线程调用 pthread exit 2、异常终止 调用abort接受到一个信号并终止最后一个线程对取消请求做处理响应 3、进程返回 通常程序运行…...

排序(3)——直接选择排序

目录 直接选择排序 基本思想 整体思路&#xff08;升序&#xff09; 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的…...

[LeetBook]【学习日记】数组内重组

题目&#xff1a;训练计划 I 训练计划 I 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性&#xff0c;需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以数组形式返回。 示例 1&#xff1a; 输入&#xff1a;act…...

【Linux】磁盘情况、挂载,df -h无法看到的卷

文章目录 解决挂载、解决挂载完重启就消失1、查看linux下的硬盘挂载的空间、使用空间2、查看没有挂载的硬盘是否检测在系统中3、挂载 &#xff08;挂载完&#xff0c;要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了&#xff09; 解决挂载、解决挂载完重启就消失 linu…...

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

运维的挑战与责任 在数字化时代&#xff0c;运维团队面临的挑战前所未有。他们不仅要确保系统的高可用性和高性能&#xff0c;还要快速响应并解决故障&#xff0c;以减少对业务的影响。在这种背景下&#xff0c;运维团队急需工具和技术&#xff0c;能够帮助他们提高效率&#…...

python 远程代码第一次推送

conda windows 环境 conda 安装后 配置环境变量 运行 conda init; conda active base 创建虚拟环境 conda create -n my_venv python3.9.5 虚拟环境应用 file-->New project --> Existing interpreter ... -->Virtualenv environment-->interpreter ...--&g…...

C++开发基础之简单的计时器也有适配场景

一、前言 计时器的开发通常涉及到计算时间间隔的方法和计算时间的方式。一般计时器的开发步骤&#xff1a; 获取起始时间点&#xff1a;在开始计时时&#xff0c;记录当前的时间戳作为起始时间点。 获取结束时间点&#xff1a;在结束计时时&#xff0c;记录当前的时间戳作为结…...

数电学习笔记——逻辑函数及其描述方法

目录 一、逻辑函数 二、逻辑函数的描述方法 1、逻辑真值表 2、逻辑函数式 3、逻辑图 4、波形图 三、逻辑函数的两种标准形式 1、最小项与最大项 最小项 最小项的性质 最大项 最大项的性质 2、最大项与最小项的关系 3、逻辑函数的最小项之和形式 4、逻辑函数的最…...

2024年护眼台灯哪家品牌好?五款优质品牌专业推荐

护眼台灯几乎是每个孩子书桌上都会有的灯具&#xff0c;但还是有不少家长觉得是“智商税”。其实护眼台灯好处非常多&#xff0c;列如能够提供舒适的照明&#xff0c;缓解用眼疲劳&#xff0c;预防近视等等。所以今天准备了一期护眼台灯测评&#xff0c;并附上护眼台灯的榜单&a…...

搜索iconfont或者阿里图标就可以得到免费的图标

你在搜索过程中就会出现一些无耻&#xff0c;不要脸的网站&#xff0c;比如说下面这个 这个才是阿里图标 看它的网址 都是免费的...

android实战视频教程,细数Android开发者的艰辛历程

缘起 随着互联网企业的不断发展&#xff0c;产品项目中的模块越来越多&#xff0c;用户体验要求也越来越高&#xff0c;想实现小步快跑、快速迭代的目的越来越难&#xff0c;还有应用之间的互相调用等等问题&#xff0c;插件化技术应用而生。如果没有插件化技术&#xff0c;美…...

nav2_gps_waypoint_follower_demo 不能在ros2 humble中直接使用的解决方法

GIT上的nav2_gps_waypoint_follower_demo是基于ros-iron编写的&#xff0c;其中followGpsWaypoints(wps) service只能在Iron上使用。 解决方法&#xff1a; 第一步&#xff1a;将interactive_waypoint_follower.py修改为如下代码&#xff1a; import rclpy from rclpy.node …...

华为OD机试 - 螺旋数字矩阵

1 题目描述 疫情期间&#xff0c;小明隔离在家&#xff0c;百无聊赖&#xff0c;在纸上写数字玩。他发明了一种写法&#xff1a; 给出数字个数 n &#xff08;0 < n ≤ 999&#xff09;和行数 m&#xff08;0 < m ≤ 999&#xff09;&#xff0c;从左上角的 1 开始&…...

Vue响应式内容丢失处理

对数组和对象进行不当的修改会使Vue的对象丢失响应式&#xff0c;这时可以直接console.log丢失的对象&#xff0c;看是否有getter和setter 对于数组和对象&#xff0c;只有使用 Vue 提供的一些方法&#xff08;如 push()、pop()、splice()、set() 等&#xff09;进行修改才会触…...

Linux安装Rabbitmq

说明&#xff1a;本文章主要是rabbitmq在Linux系统上的安装&#xff0c;文章中包含了rabbitmq的下载及依赖下载 1.版本选取&#xff0c;这里的选取主要是版本的兼容问题 去这个网址查看mq和erlang版本兼容&#xff1a;RabbitMQ Erlang Version Requirements | RabbitMQ 2.相…...

在nginx 服务器部署vue项目

以人人快速开发的开源项目&#xff1a;renren-fast-vue 为例 注&#xff1a;这里开始认为各位都会使用nginx 打包vue项目 npm run build 测试打包的项目是否可以运行 serve dist 可以正常运行 编译报错请移步到&#xff1a;renren-fast-vue1.2.2 项目编译报错: build g…...

制作一个简单的HTML个人网页

制作一个简单的HTML个人网页 1.1 硬件1.1.1 一台电脑1.1.2 配置要求 1.2 系统1.3 软件 二、制作一个简单的HTML个人网页1.创建一个HTML网页1.1 新建文本文档1.2 另存文本文档1.3 命名为index.html 2.编写HTML代码2.1 打开HTML2.2 复制HTML代码2.3 粘贴HTML代码2.4 保存HTML 3.预…...

HM2019创建载荷工况

该案例中将介绍载荷、工况、约束的创建 步骤一&#xff1a;首先创建两个载荷集(Load Collector)用来存放载荷和约束 步骤二&#xff1a;在Analysis面板下创建约束(Analysis→constraints) 注意&#xff1a;Load type选择SPC表示统计过程控制(Statistical Process Control) 步…...

Effective C++ 学习笔记 条款14 在资源管理类中小心copying行为

条款13导入这样的观念&#xff1a;“资源取得时机便是初始化时机”&#xff08;Resource Acquisition Is Initialization&#xff0c;RAII&#xff09;&#xff0c;并以此作为“资源管理类”的脊柱&#xff0c;也描述了auto_ptr和tr1::shared_ptr如何将这个观念表现在heap-base…...

c++数据结构算法复习基础-- 3 --线性表-单向链表-笔试面试常见问题

1、单链表逆序 思路图 代码实现 //著: 链表结构里记得加 friend void ReverseLink(Clink& link); void ReverseLink(Clink& link) {Node* p link.head_->next_;while( p nullptr){return;}Node* q p->next_;link.head_->next_ nullptr;while(p ! nullpt…...

Java 26 FFM API进阶:零JNI调用TensorRT/OpenVINO,AI端到端延迟砍半

文章目录一、JNI&#xff0c;AI时代的"文言文写作"二、FFM API&#xff1a;Java调用原生代码的"现代白话文"1. Arena&#xff1a;比try-with-resources还狠的内存管理2. Linker&#xff1a;C函数的"Java身份证"3. jextract&#xff1a;头文件自动…...

ArduinoLog:面向MCU的零开销C++嵌入式日志框架

1. ArduinoLog 项目概述ArduinoLog 是一款专为 Arduino 及兼容嵌入式平台&#xff08;包括 AVR、SAM、ESP8266 等&#xff09;设计的轻量级 C 日志框架。其核心设计哲学是“零运行时开销、零动态内存分配、全编译期可控”&#xff0c;在资源极度受限的微控制器环境中&#xff0…...

软件实施交付转运维学习第三天:Linux系统命令基础(部分)

从实施到运维的蜕变之路&#xff0c;掌握命令就是掌握Linux的灵魂写在前面作为一名从软件实施交付转向运维的工程师&#xff0c;我深刻体会到&#xff1a;Linux命令不仅仅是简单的指令&#xff0c;更是与操作系统对话的语言。当我们站在实施和运维的交界处&#xff0c;掌握Linu…...

GLM-OCR部署避坑:CPU模式也能用,无显卡用户详细指南

GLM-OCR部署避坑&#xff1a;CPU模式也能用&#xff0c;无显卡用户详细指南 你是不是也遇到过这种情况&#xff1a;看到别人用AI模型轻松识别文档、提取表格&#xff0c;自己也想试试&#xff0c;结果一查部署要求——“需要NVIDIA显卡&#xff0c;显存8GB以上”。手头只有一台…...

深入OpenHarmony NAPI引擎:从‘@ohos.hilog’导入到so库加载的底层链路剖析

深入OpenHarmony NAPI引擎&#xff1a;从‘ohos.hilog’导入到so库加载的底层链路剖析 当开发者在OpenHarmony应用中写下import hilog from ohos.hilog时&#xff0c;背后隐藏着一套精密的系统级协作机制。这条看似简单的语句&#xff0c;实际上触发了从JavaScript语法解析到原…...

保姆级教程:在RK3588上交叉编译Qt 5.15.15(含完整配置流程)

保姆级教程&#xff1a;在RK3588上交叉编译Qt 5.15.15&#xff08;含完整配置流程&#xff09; 在嵌入式开发领域&#xff0c;RK3588作为一款高性能的ARM处理器&#xff0c;正逐渐成为智能终端设备的首选平台。而Qt框架凭借其跨平台特性和丰富的GUI组件&#xff0c;为嵌入式界面…...

Z-Image Atelier 跨平台部署:应对不同操作系统的环境配置要点

Z-Image Atelier 跨平台部署&#xff1a;应对不同操作系统的环境配置要点 最近在帮几个朋友部署Z-Image Atelier这个挺有意思的AI图像工具&#xff0c;发现大家用的系统五花八门&#xff0c;有Windows、有Ubuntu&#xff0c;还有用Mac的。结果就是&#xff0c;照着同一个教程走…...

【NX二次开发】cam对象类型

//此函数的功能是打印当前坐标系试图的所有坐标系名称 static void geom_list_name(tag_t group_tag) { //ask_member_list int count=0; tag_t *list=NULL; //ask_name char name[UF_OBJ_NAME_LEN+1]; //ask_type_and_subtype int type=0; in…...

STM32 SRAM调试实战与优化技巧

1. STM32 SRAM调试实战指南在嵌入式开发中&#xff0c;我们通常将程序烧录到Flash中运行。但当你需要快速验证代码、调试硬件问题或进行临时测试时&#xff0c;使用STM32内部SRAM运行程序会是个高效的选择。我最近在调试一个LED控制程序时&#xff0c;就采用了SRAM运行的方式&a…...

鸿蒙3.1实测:UART调试日志去Root全流程(含init.cfg避坑指南)

鸿蒙3.1 UART调试权限管理实战&#xff1a;从Root到Shell的无缝切换 当你在深夜的实验室里盯着串口终端上刺眼的#符号时&#xff0c;是否曾思考过这个Root权限带来的安全隐患&#xff1f;鸿蒙系统作为新一代分布式操作系统&#xff0c;其权限管理机制与Android有着本质区别。本…...