环境变量与进程详解

news2024/9/22 7:33:35

文章目录

  • 1.进程的优先级
    • 1.1 查看优先级
    • 1.2 调制优先级
  • 2.环境变量
    • 2.1 命令行参数
    • 2.2 环境变量
  • 3.程序的地址空间
    • 3.1 为什么要有地址空间?
    • 3.2 linux的大O(1)调度算法
  • 4.进程创建
  • 5.进程中止
    • 5.1 进程的退出码(错误码)
    • 5.2 进程终止的最优写法!
    • 5.3 进程终止的三种方法
  • 6.进程等待
    • 6.1 wait
    • 6.2 waitpid
    • 6.3 获取退出信息和退出码
    • 6.4 非阻塞轮询
  • 7.进程程序替换
    • 7.1 进程替换现象和原理
    • 7.2 多进程的程序替换
    • 7.3 关于常用的进程替换的函数


1.进程的优先级

在这里插入图片描述

1.1 查看优先级

在这里插入图片描述

1.2 调制优先级

在这里插入图片描述
虽然有这种功能,但是我严格不建议大家调整优先级!!!!!!!!!!!!!

2.环境变量

2.1 命令行参数

main中有时候带参数,有时候不带参数,那么这个参数到底是什么?
在这里插入图片描述

在这里插入图片描述
到这里,linux中的命令,其实都是可执行程序!!!

2.2 环境变量

我们可以发现,平时的linux命令ls,pwd这些可以直接运行
而我们自己编译完成的可执行程序得./a.out才可以运行,为什么不可以直接像ls那些一样直接运行呢?????
在这里插入图片描述
想要和ls命令一样直接运行怎么办??
在这里插入图片描述
但是要注意添加环境变量是由讲究的:
在这里插入图片描述
其他的环境变量:
在这里插入图片描述
利用代码看环境变量:
在这里插入图片描述
获取环境变量的方法:
在这里插入图片描述

3.程序的地址空间

在这里插入图片描述

3.1 为什么要有地址空间?

在这里插入图片描述

3.2 linux的大O(1)调度算法

在这里插入图片描述

4.进程创建

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

返回值:自进程中返回0,父进程返回子进程id,出错返回-1
在这里插入图片描述

通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。
在这里插入图片描述

创建进程也是有可能失败的,原因有:
①系统中有太多的进程
②实际用户的进程数超过了限制

5.进程中止

5.1 进程的退出码(错误码)

在这里插入图片描述
代码跑完,结果正确。
代码跑完,结果不正确。
可以通过进程的退出码绝对!

还有一个情况:
代码出异常了,没跑完,提前结束!
操作系统发现了你做了不该做的使其,操作系统就会杀死进程!
一旦出现异常,退出码就没有意义了!
在这里插入图片描述

5.2 进程终止的最优写法!

在这里插入图片描述

5.3 进程终止的三种方法

在这里插入图片描述

6.进程等待

等待有阻塞等待和非阻塞等待。
阻塞等待就是父进程等子进程的时候什么也不做。
非阻塞等待就是父进程等待子进程的时候可以做其他事情!

进程等待有两个很重要的函数,wait和waitpid
在这里插入图片描述
等待的时候是会解决子进程的僵尸问题的!
在这里插入图片描述

6.1 wait

pid_t wait(int*status);
返回值:
成功返回被等待进程pid,失败返回-1。
参数:
输出型参数,获取子进程退出状态,不关心则可以设置成为NULL

6.2 waitpid

pid_ t waitpid(pid_t pid, int *status, int options);
返回值:
当正常返回的时候waitpid返回收集到的子进程的进程ID;即id就是fork的返回值
如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;
如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;
参数:
pid:
①Pid=-1,等待任一个子进程。与wait等效。 即pid=-1,则表示等待任意一个子进程退出。
②Pid>0.等待其进程ID与pid相等的子进程。 即pid>0,则表示等待制定的子进程退出。

status:
WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)也就是查终止信号是否为0.
WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)也就是查退出码是否为0。

options:
options的值若为0,那么就是阻塞等待。父进程什么也不做,就等子进程啥时候结束!
宏(WNOHANG):非阻塞等待, 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进 程的ID。

6.3 获取退出信息和退出码

这是一种比较僵硬的写法:
在这里插入图片描述
更好的写法利用WEXITSTATUS:
在这里插入图片描述

6.4 非阻塞轮询

在这里插入图片描述

7.进程程序替换

7.1 进程替换现象和原理

在这里插入图片描述

7.2 多进程的程序替换

在这里插入图片描述

7.3 关于常用的进程替换的函数

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

苍穹外卖Day07——总结7

前期文章 文章标题地址苍穹外卖Day01——总结1https://lushimeng.blog.csdn.net/article/details/135466359苍穹外卖Day02——总结2https://lushimeng.blog.csdn.net/article/details/135484126苍穹外卖Day03——总结3https://blog.csdn.net/qq_43751200/article/details/1363…

Data.olllo解密:秒数转换为日期格式的神奇技能!

引言&#xff1a; 时间是数据世界中不可或缺的一环&#xff0c;而将秒数转换为易读的日期格式往往是数据处理中的一大挑战。但是&#xff0c;有了Data.olllo&#xff0c;这一任务将变得异常简单&#xff01; 功能介绍&#xff1a; Data.olllo的秒数转换功能可以让您轻松地将秒…

花钱买不到系列-linux信号[2]卷

上一篇信号&#xff0c;我们知道了&#xff0c;进程需要保存信号&#xff0c;信号究竟是什么&#xff1f;什么又叫做发送信号呢&#xff1f;什么又叫做进程保存信号呢&#xff1f;那么&#xff0c;实际上呢&#xff1f;给大家一个基本的思考切入点&#xff0c;就是我们常见的信…

摩根大通:金和铜短期都涨多了 “一年十倍股”超微:预计在AI服务器占10-15%份额,给24倍PE很合理

今年以来大宗商品持续回暖&#xff0c;黄金、铜等金属表现尤为亮眼&#xff0c;乐观情绪蔓延之际摩根大通站出来提醒&#xff0c;小心回调风险&#xff01; 摩根大通在最新商品金属周报指出&#xff0c;黄金和铜价的急剧上涨反映了市场对中长期趋势的乐观预期&#xff0c;然而…

出差补助怎么发放更高效省心?这套攻略快看看

交补、餐补、话补等各类补助场景分散&#xff0c;无法实现一站式统筹管理。不仅如此&#xff0c;补贴核算也总是需要员工提供各类凭证&#xff0c;经过财务反复核实才能发放……出差发放补助原本是为了传递企业关怀&#xff0c;鼓励员工积极出差&#xff0c;由于发放和管理不当…

刷题日记——济南大学机试

折戟厦大&#xff0c;考虑调剂济南大学&#xff0c;但是更想去的是杭师大&#xff0c;还是刷题&#xff0c;济南大学比厦门大学题目简单很多&#xff0c;因此一篇文章不多分析&#xff0c;直接给出代码&#xff0c;全部采用纯C语言编写并且AC&#xff0c;不用C的stl库。 争取今…

Python学习笔记(二)

一&#xff1a;异常&#xff1a; 1.1&#xff1a;异常处理&#xff1a; 1.2&#xff1a;异常捕获&#xff1a; 1.3&#xff1a;异常传递&#xff1a; 二&#xff1a;模块&#xff1a; 2.1&#xff1a;模块的定义&#xff1a; 2.2&#xff1a;模块的导入&#xff1a; 2.3&…

vue3+ts+elementplus写一个登录页面教程

文章目录 前言1. 安装 Vue CLI 和 TypeScript 支持2. 创建登录组件 文章重点内容 前言 前期准备步骤&#xff1a; 创建一个使用 Vue 3 和 TypeScript 的登录页面涉及到多个步骤。以下是一个基本的教程&#xff0c;帮助你从头开始构建这样一个页面&#xff1a; 1. 安装 Vue CL…

电路笔记 :灯光画 元器件焊接+连锡处理

https://oshwhub.com/qazwsx1987/dengguanghua_0#P3 基础工具 常用的电路焊接工具&#xff1a; 工具描述电烙铁我买了一个便携电烙铁&#xff0c;但是烙铁头温度太低&#xff0c;焊锡总是粘在烙铁头上&#xff08;因为电量不足&#xff09;, 打火机秒变电烙铁焊台用于支撑工…

突破创作瓶颈:Kompas.ai的创意激发法

在创作的世界里&#xff0c;灵感如同一股清泉&#xff0c;滋养着每一个创作者的心灵。然而&#xff0c;即便是最富创造力的头脑&#xff0c;也难免会遇到创作瓶颈——那些令人窒息的、灵感枯竭的时刻。这些瓶颈不仅阻碍了创作的进程&#xff0c;还可能严重影响内容的质量和创作…

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…

卷起来——高级数据分析师

要成为一名高级数据分析师&#xff0c;需要掌握一系列的技能&#xff0c;包括数据处理、统计分析、机器学习、数据可视化以及业务理解等&#xff0c;喜欢或者想往这方面发展的童鞋们&#xff0c;卷起来&#xff0c;点击以下链接中的链接&#xff0c;备注"分析"进群交…

MySQL事务(超详细!!!)

目录 一、MySQL事务的概念 二、事务的ACID特点 1、原子性&#xff08;Atomicity&#xff09; 2、持久性 3、隔离性&#xff08;Isolation&#xff09; 3.1 事务的并发问题 ①、脏读(读取未提交数据) ②读已提交、不可重复读(前后多次读取&#xff0c;数据内容不一致) …

深入探讨Maven打包:打造精致的Zip包

在部署Spring Boot生产项目时&#xff0c;首先需要使用Maven将其打包成一个JAR文件或者包含JAR文件的ZIP文件。随后&#xff0c;通过堡垒机将打包好的文件上传至服务器进行部署&#xff0c;或构建成Docker镜像进行发布。在这一过程中&#xff0c;我们需要将项目中的配置文件或静…

I.MX6ULL_Linux_驱动篇(56)linux PWM驱动

PWM 驱动简析 设备树 PWM 控制器节点 I.MX6ULL 有 8 路 PWM 输出&#xff0c;因此对应 8 个 PWM 控制器&#xff0c;所有在设备树下就有 8 个PWM 控制器节点。这 8 路 PWM 都属于 I.MX6ULL 的 AIPS-1 域&#xff0c;但是在设备树 imx6ull.dtsi 中分为了两部分&#xff0c; PW…

科技引领趋势:3D元宇宙展厅在各行业中的应用及其未来展望

随着技术的不断进步&#xff0c;3D元宇宙展厅正逐渐成为各行各业展示产品的新选择。相较于传统的线下展厅&#xff0c;3D元宇宙展厅以其独特的优势&#xff0c;为产品展示和品牌推广提供了全新的可能性。 一、虚拟与现实的完美融合 3D元宇宙展厅是指在虚拟世界中构建的三维展览…

提升质量透明度,动力电池企业的数据驱动生产实践 | 数据要素 × 工业制造

系列导读 如《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》指出&#xff0c;工业制造是“数据要素”的关键领域之一。如何发挥海量数据资源、丰富应用场景等多重优势&#xff0c;以数据流引领技术流、资金流、人才流、物资流&#xff0c;对于制造企业而言…

一身素衣凭栏观景,携几缕清风伴皓月入梦

这个国风两件套真的很难不爱一套上身简直就是梦中的白月光素净优雅又不失清冷气质波浪型门襟绣加上花枝缠绕的绣花图案增添了设计感的同时又不失美感半裙做的是A摆小伞裙的版型裙摆的分割和收褶处理增加了层次感半裙里布很贴心的做了裤里&#xff0c;不易走光夏天穿上这套出街一…

JavaScript 学习日记(1)---初识JavaScript

初识JavaScript 文章目录 初识JavaScript一、JavaScript 是什么?二、java 和JavaScript 的关系三、JavaScript 的组成四、JS的基本输入输出 ---> 单行注释五、js变量基本概念六、js基本数据类型七、js转义字符八、js类型转换九、运算符 END! 一、JavaScript 是什么? 我们…

ESCTF赛题WP

ESCTF_reverse题解 逆吧腻吧babypybabypolyreeasy_rere1你是个好孩子完结撒花 Q_W_Q 逆吧腻吧 下载副本后无壳&#xff0c;直接拖入ida分析分析函数逻辑&#xff1a;ida打开如下&#xff1a;提取出全局变量res的数据后&#xff0c;编写异或脚本进行解密&#xff1a; a[0xBF, …