当前位置: 首页 > 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函数会被信号唤醒

http://www.lryc.cn/news/312185.html

相关文章:

  • 排序(3)——直接选择排序
  • [LeetBook]【学习日记】数组内重组
  • 【Linux】磁盘情况、挂载,df -h无法看到的卷
  • AIOps实践中常见的挑战:故障根因与可观测性数据的割裂
  • python 远程代码第一次推送
  • C++开发基础之简单的计时器也有适配场景
  • 数电学习笔记——逻辑函数及其描述方法
  • 2024年护眼台灯哪家品牌好?五款优质品牌专业推荐
  • 搜索iconfont或者阿里图标就可以得到免费的图标
  • android实战视频教程,细数Android开发者的艰辛历程
  • nav2_gps_waypoint_follower_demo 不能在ros2 humble中直接使用的解决方法
  • 华为OD机试 - 螺旋数字矩阵
  • Vue响应式内容丢失处理
  • Linux安装Rabbitmq
  • 在nginx 服务器部署vue项目
  • 制作一个简单的HTML个人网页
  • HM2019创建载荷工况
  • Effective C++ 学习笔记 条款14 在资源管理类中小心copying行为
  • c++数据结构算法复习基础-- 3 --线性表-单向链表-笔试面试常见问题
  • 【踩坑专栏】追根溯源,从Linux磁盘爆满排查故障:mycat2与navicat不兼容导致日志暴增
  • DolphinScheduler——奇富科技的调度实践
  • 2024年最全洗地机选购攻略盘点丨希亦、小米、云鲸、海尔洗地机哪款值得入手?
  • HTML笔记3
  • 利用Python副业赚钱,看完这篇你就懂了!
  • FP16(半精度浮点数)、FP32(单精度浮点数)和INT8
  • MySQL数据管理二
  • sqoop-import 详解
  • 第二周opencv
  • python_读取txt文件绘制多条曲线II
  • java排序简单总结和推荐使用套路(数据排序,结构体排序)