进程1——进程与线程——day09

今天,主要讲一下进程的一些基本概念和一些接口

首先是进程的基本概念:

1.进程:

程序:存放在外存中的一段数据组成的文件
进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡

2.进程相关命令:

1.top
  动态查看当前系统中的所有进程信息(根据CPU占用率排序)PID:唯一识别进程的ID号(>0)优先级:Linux系统中数据高,优先级高(-20 - 19)  Windows系统中数值高,优先级高进程状态: R   运行态/就绪态S   睡眠态/可唤醒等待态D   不可唤醒等待态T   暂停态Z   僵尸态X   结束态q退出 
2.nice
  以指定优先级来运行进程示例:nice -n 优先级 要执行的集成任务renice 重新设定一个正在运行的进程的优先级示例:renice -n 优先级 进程PID 
3.kill
  杀死指定的进程任务示例:kill -9 进程PID killall 杀死进程名对应的所有进程任务示例:killall -9 进程名 
4.ps -ef
  查看当前时刻所有进程的信息PPID:父进程的ID号 ps -ef | grep a.out 
5.pstree
  查看进程树关系
6.ps -aux
  查看当前时刻的进程信息
7…/a.out &
  将a.out任务放在后台执行
8.jobs
  查看一个终端下后台执行的所有任务
9.fg 编号
  将后台任务放到前台执行

3.进程的创建

     这里我们以32bits的操作系统做概括一个进程在运行时,操作系统会为该进程分配 0 - 4G 虚拟内存空间,分为文本段、数据段、系统数据段文本段:也称为文本区,存放代码和指令数据段:也称为数据区,可以细分为:1.字符串常量区2.未初始化全局变量/静态变量3.已初始化全局变量/静态变量 系统数据段:包含堆区和栈区

在这里插入图片描述

4.进程中虚拟地址和物理地址的关系

1. 0 - 4G虚拟内存空间只有一个
2. 实际物理地址中每个进程空间独立
3. 通过MMU内存映射单元,单一个进程执行时,将物理地址中的数据加载到虚拟地址中运行

5.进程的调度:

1.常见的调度算法:
  1.先来先执行,后来后执行2.高优先级调度算法3.时间片轮转调度算法4.多级队列反馈调度算法5.负载均衡调度算法时间片:1.CPU在一个任务中的运行时间称为一个时间片
2.宏观并行,微观串行
3.进程的状态:
    R     运行态、就绪态 S     睡眠态/可唤醒等待态 D     不可唤醒等待态 T     暂停态Z     僵尸态X     结束态

6.进程相关函数接口:

1.进程的创建
fork
  pid_t fork(void);功能:创建一个子进程,新创建的进程称为原来进程的子进程,原来的进程称为新进程的父进程参数:void 缺省返回值:成功子进程返回0 父进程返回子进程的PID 失败返回-1 父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段  
getpid
  pid_t getpid(void);功能:获得调用进程的PID号getppidpid_t getppid(void);功能:获得调用进程的PPID

练习:
创建一个父进程的2个子进程,子进程中打印自己的PID和父进程的PID
父进程中打印自己的PID和两个子进程的PID

#include"head.h"int main(void)
{pid_t pid1;pid_t pid2;pid1 = fork();if(-1 == pid1){perror("fail to fork");return -1;}if(0 == pid1){printf("Child1 Process PID:%d PPID:%d\n",getpid(),getppid());}else if(pid1 > 0){pid2 = fork();if(-1 == pid2){perror("fail to fork");return -1;}if(0 == pid2){printf("Child2 Process PID:%d PPID:%d\n",getpid(),getppid());}else if(pid2 > 0){printf("Parent Process PID:%d Child PID1:%d PID2:%d\n",getpid(),pid1,pid2);}}while(1){}return 0;
}

结果:
在这里插入图片描述

2.exit
void exit(int status);
功能:让进程结束
参数:status:进程结束的状态
返回值:缺省exit在主函数中使用和return效果一致
exit会刷新缓存区_exit
void _exit(int status);
功能:让进程直接结束
参数:status:进程结束的状态
返回值:缺省

7.进程的消亡

1.僵尸进程:
进程代码执行结束,空间没有被回收,称为僵尸进程
2.如何避免产生僵尸进程?
1.让父进程先结束
2.让父进程回收子进程空间
3.孤儿进程:
  进程的父进程先结束,此时该进程称为孤儿进程,被系统进程收养,进程再结束时,会被系统进程回收进程空间

8.wait

pid_t wait(int *wstatus);
功能:回收子进程空间
参数:wstatus:存放子进程结束状态空间的首地址
返回值:成功返回回收到的子进程PID失败返回-1 
1.wait函数具有阻塞功能
2.wait函数具有同步功能
WIFEXITED(wstatus)
进程是否正常退出 WEXITSTATUS(wstatus)
进程结束状态值WIFSIGNALED(wstatus)
进程是否被信号杀死WTERMSIG(wstatus)
获得杀死进程的信号编号

我们可以举一个例子,来检测该进程是否为正常结束

#include"head.h"int main(void)
{pid_t pid;pid_t ret;int wstatus;pid = fork();if(-1 == pid){perror("fail to fork");return -1;}if(0 == pid){printf("Child Process start! PID:%d PPID:%d\n",getpid(),getppid());sleep(10);printf("Child Process ending!\n");exit(10);}else if(pid > 0){printf("Parent Process start! PID:%d\n",getpid());ret = wait(&wstatus);if(-1 == ret){perror("fail to wait");return -1;}printf("Reclaim to %d subprocess space \n",ret);if(WIFEXITED(wstatus)){printf("Normal end with a value of %d\n",WEXITSTATUS(wstatus));}else if(WIFSIGNALED(wstatus)){printf("Killed by the %d signal\n",WTERMSIG(wstatus));}}return 0;
}

如果为正常结束:
在这里插入图片描述
但是如果在进程工程中杀死该子进程,则会出现:
在这里插入图片描述
在这里插入图片描述
表示该进程被信号为9的编号杀死

以上就是今天内容,谢谢大家

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

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

相关文章

【Nginx】微信小程序后端开发、一个域名访问多个服务

【Nginx】微信小程序后端开发、一个域名访问多个服务 1. 微信小程序后端开发 对于后端程序员,其实你们的职责就是干老本行,即写接口和服务,让前端能够访问你的接口就行,必要时需要查看微信小程序开发文档去向微信服务器发请求。…

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基…

零基础手把手教你创建微信小程序(二)·创建第一个微信小程序以及了解小程序代码的构成

零基础手把手教你创建微信小程序(一)微信小程序开发账号的注册以及开发者工具的安装和使用-CSDN博客 目录 ​编辑 1. 创建微信小程序 1.1 基本信息 1.2 在模拟器上查看项目效果 1.3 在真机上预览项目效果 1.4 主界面的5个组成部分 1.4.1 菜单…

NPM私服搭建(verdaccio)

官网地址:https://verdaccio.org/ 概述 Verdaccio 是一个流行的 Node.js 包管理器的代理工具,它允许您在本地或私有网络上轻松地创建和管理 npm 包仓库。通过 Verdaccio,开发团队可以建立自己的 npm 包仓库,以更好地控制和管理其依…

【力扣】Z 字形变换,模拟 + 直接构造

Z 字形变换原题地址 方法一:利用二维矩阵模拟 对于特殊情况,Z 字形变换后只有一行或只有一列,则变换后的字符串和原字符串相同。 对于一般情况,我们可以考虑按照题目要求,把字符串按照 Z 字形存储到二维数组中&…

做抖店想要快速起店怎么办?产品和流量是关键!新手可收藏!

大家好,我是电商小布。 在抖音小店开通完成后,大家考虑的第一件事情,一定是小店如何能够快速出单,成功起店。 店铺出单的重点,其实就在小店的运营上。 那么这么多的环节,关键点在哪呢? 答案…

大学生多媒体课程学习网站thinkphp+vue

开发语言:php 后端框架:Thinkphp 前端框架:vue.js 服务器:apache 数据库:mysql 运行环境:phpstudy/wamp/xammp等开发背景 (一) 研究课程的提出 (二)学习网站的分类与界定…

前端页面之间传输数据 localStorage

效果 发送方 接收方 localStorage 的使用 // 保存数据 localStorage.setItem(key, value); // 获取数据 localStorage.getItem(key);发送方 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录<…

【深蓝学院】移动机器人运动规划--第6章 模型预测控制(MPC)与运动规划--笔记

0. Outline 1. Reactive Control&#xff08;反应式控制&#xff09; 控制学中的 “Reactive Control” 通常指的是一种控制策略&#xff0c;它依赖于系统对特定事件或变化的即时反应&#xff0c;而不是按照预定的计划或策略行动。这种控制往往是基于当前的传感器输入来做出决…

c编译器学习07:minilisp编译器改造(debug模式支持调试)

问题 原版的minilisp编译器不支持argv输入测试&#xff0c;不方便单步调试。 代码改造目标是既不改变原有程序的各种功能&#xff0c; 又能支持个人习惯的vs单步debug模式。 CMakeLists.txt变更 定义DEBUG宏 解决单步调试源码定位偏差问题 cmake_minimum_required(VERSION …

【Android安全】Windows 环境下载 Android 源码

准备环境 安装 git 安装 Python 硬盘剩余容量最好大于 100G 打开 Git Bash&#xff0c;用 git 克隆源代码仓库 git clone https://android.googlesource.com/platform/manifest.git //没有梯子使用清华源 git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git…

RabbitMQ 部署方式选择

部署模式 RabbitMQ支持多种部署模式&#xff0c;可以根据应用的需求和规模选择适合的模式。以下是一些常见的RabbitMQ部署模式&#xff1a; 单节点模式&#xff1a; 最简单的部署方式&#xff0c;所有的RabbitMQ组件&#xff08;消息存储、交换机、队列等&#xff09;都运行在…

TensorRT及CUDA自学笔记003 NVCC及其命令行参数

TensorRT及CUDA自学笔记003 NVCC及其命令行参数 各位大佬&#xff0c;这是我的自学笔记&#xff0c;如有错误请指正&#xff0c;也欢迎在评论区学习交流&#xff0c;谢谢&#xff01; NVCC是一种编译器&#xff0c;基于一些命令行参数可以将使用PTX或C语言编写的代码编译成可…

新手如何自己建网站的详细步骤?-网站建设

新手如何自己建网站的详细步骤&#xff1f;-网站建设 我们选择了白嫖雨云的二级域名 浏览器输入https://www.rainyun.com/z22_ 创建账号然后选择一个你喜欢的子域名我建议后缀选择ates.top的 选择自定义地址&#xff0c;类型选择cname 现在要选择记录值了&#xff0c;有a&…

linux内核原理--页高速缓存,回写,页框回收

1.页高速缓存 我们主要分析下磁盘文件的页高速缓存 struct address_space {struct inode *host; struct radix_tree_root page_tree; spinlock_t tree_lock;unsigned int i_mmap_writable;struct prio_tree_root i_mmap; struct list_head i_mmap_nonlinear;spinlock_t i_…

2023最新简绘AI开源版支持MJ绘画,AI问答

应用介绍 本文来自&#xff1a;2023最新简绘AI开源版支持MJ绘画&#xff0c;AI问答 - 源码1688 简介&#xff1a; 简绘AI开源版&#xff0c;从闲鱼上买的&#xff0c;搭建教程如下 测试环境&#xff1a;NginxPHP7.4MySQL5.6 图片&#xff1a;

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed

问题描述 安装nacos2.0以上版本&#xff0c;启动报错:com.alibaba.nacos.api.exception.NacosException: Request nacos server failed com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: at com.alibaba.nacos.client.naming.remote.gprc.Nami…

2024022402-数据库恢复技术

数据库恢复技术 什么是事务 事务(Transaction)是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位 事务和程序是两个概念 在关系数据库中&#xff0c;一个事务可以是一条SQL语句&#xff0c;一组SQL语…

Movelt使用笔记-Movelt Setup Assistant

目录 Setup Assistant配置1 Start 加载urdf模型3 Virtual joints 虚拟关节5 Robot Poses 机器人位姿7 Passive Joints 被动关节8 Controllers 控制器9 Simulation 仿真10 3D Perception 3D感知11 Author Information 作者信息12 Configuration Files 配置文件启动MoveIt!Setup…

潇洒郎:2024 IDEA、Pycharm获取最新激活码获取方式

IDEA获取最新激活码 https://idea.javatiku.cn/ 手机打开&#xff0c;看到验证码&#xff0c;30分钟有效&#xff0c;输入验证码 获取到最新激活码