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

学习笔记第二十四天

1.exec族函数的区别

  int exec l(const char *path, const char *arg, ...);
  int exec l p(const char *file, const char *arg, ...);
  int exec l e(const char *path, const char *arg,..., char * const envp[]);
  int exec v(const char *path, char *const argv[]);
  int exec v p(const char *file, char *const argv[]);
  int exec v pe(const char *file, char *const argv[], char *const envp[]);

        路径 vs 文件名

        使用完整路径(path)的函数(如execlexecvexecleexecve)需要指定可执行文件的

完整路径。

        使用文件名(file)的函数(如execlpexecvp)会根据PATH环境变量中指定的目录来搜索

可执行文件。

        参数传递方式

   l(list)后缀的函数(如execlexeclpexecle)要求将命令行参数逐个列出,并以NULL

为结束标志。

   v(vector)后缀的函数(如execvexecvpexecve)要求将命令行参数组织成一个字符指

针数组(char *const argv[]),并将这个数组的指针传递给函数。

        环境变量

        大多数exec函数使用调用进程继承的环境变量。以e(environment)结尾的函数(如

execleexecve)允许显式地传递一个新的环境变量数组给新程序。

        真正的系统调用

  execve是唯一真正的系统调用。其他exec函数都是库函数,它们最终都会调用execve

2. exit 库函数

        功能:exit 函数用于终止当前进程,并向父进程返回一个整数状态码。同时,它会刷新所有

输出流(如标准输出 stdout)的缓冲区,并调用通过 atexit 函数注册的所有清理函数(按注册顺

序的逆序调用)。

        参数:int status,表示进程的退出状态。通常,EXIT_SUCCESS(定义为0)表示成功,

而 EXIT_FAILURE(通常定义为1,但具体值取决于系统)表示某种形式的失败。

        返回值:exit 函数没有返回值,因为一旦调用,程序就会终止。

3. _exit 系统调用

        功能:_exit 是一个系统调用,用于立即终止当前进程,但与 exit 不同,它不会刷新输出流

的缓冲区,也不会调用 atexit 注册的清理函数。

        参数:与 exit 相同,int status 表示进程的退出状态。

        返回值:同样,_exit 也没有返回值,因为程序会立即终止。

4. atexit

        功能:atexit 函数用于注册一个函数,该函数将在程序正常终止(即调用 exit 或从 main 函

数返回)时自动调用。这可以用于执行必要的清理操作,如释放资源、关闭文件等。

        参数:void (*function)(void),一个指向函数的指针,该函数没有参数并返回 void

        返回值:成功时返回0,失败时返回非0值。通常,atexit 的失败很少见,因为它只是向一个

列表中添加一个函数指针。

5.创建 进程 (fork)   

          1.创建之后,父子进程各自拥有4g独立的内存空间         

           2.各自拥有自己的相关的程序的各个段 数据段,所以,各自之间对数据的改变,不会相互影响 

        3.子进程会继承父进程已打开的文件描述符 
             若,fork之前打开文件,父子进程操作同一个文件,相互间有影响
             若,fork之后打开文件,父子进程操作同一个文件,但是,因为各自拥有自己的 "文件表项",
             所以,各自按照自己的逻辑改变文件

6.进程的终止:8种情况

        1)main 中 return

         2)exit() //库函数 

        c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。

        注册清理函数(atexit)。

        3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。 //系统调用 

        4) 主线程退出  

        5)主线程调用pthread_exit     

        异常终止:

        6)abort()

        7)signal   kill pid

        8) 最后一个线程被pthread_cancle
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024牛客暑期多校训练营7
  • 在IntelliJ IDEA中利用Git拉取项目
  • Midjourney技巧-生成拟人化动物(做你的品牌形象代言人)
  • 代码随想录算法训练营第十五天(一)| 110.平衡二叉树 (优先掌握递归)257. 二叉树的所有路径
  • 【安全工具推荐-Search_Viewer资产测绘】
  • 欺诈文本分类微调(一):基座模型选型
  • 使用Gitlab实现monorepo多项目CICD
  • 一文HDMI (High-Definition Multimedia Interface)
  • spring常见面试题
  • React 学习——react项目中加入echarts图
  • 【ARM CoreLink 系列 4.2 -- NIC-400 控制器详细介绍】
  • Java语言程序设计——篇十三(1)
  • 浅述TSINGSEE青犀EasyCVR视频汇聚平台与海康安防平台的区别对比
  • Python生成缩略图
  • C++初阶_2: inline内联函数 宏函数
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker下部署自己的LNMP工作环境
  • ECMAScript6(0):ES6简明参考手册
  • ECMAScript入门(七)--Module语法
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6--对象的扩展
  • extract-text-webpack-plugin用法
  • gcc介绍及安装
  • interface和setter,getter
  • Laravel Mix运行时关于es2015报错解决方案
  • log4j2输出到kafka
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL主从复制读写分离及奇怪的问题
  • 大数据与云计算学习:数据分析(二)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 欢迎参加第二届中国游戏开发者大会
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端知识点整理(待续)
  • 区块链分支循环
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深度学习中的信息论知识详解
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 算法之不定期更新(一)(2018-04-12)
  • 微信开源mars源码分析1—上层samples分析
  • 学习Vue.js的五个小例子
  • 延迟脚本的方式
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • ${factoryList }后面有空格不影响
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Java入门)学生管理系统
  • (libusb) usb口自动刷新
  • (windows2012共享文件夹和防火墙设置
  • (八)Flink Join 连接
  • (编译到47%失败)to be deleted
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)springboot助农电商系统 毕业设计 081919