linux--进程控制2

2023-05-16

在进程控制的章节我们讲解了我们的进程创建,这章节对进程控制进行补充,

进程终止

在我们创建一个进程之后我们避免不了我们去终止我们的进程。
终止场景

  • 正常退出,结果符合我们的预期
  • 正常退出,结果不符合我们的预期
  • 异常退出

终止方式

  • main函数直接return
  • 调用exit函数
  • 调用_exit函数
 	   #include <unistd.h>
       void _exit(int status);
       #include <stdlib.h>
       void _Exit(int status);

虽然两个函数都是可以让进程终止的,但是两个函数并不是完全一样的
exit和_exit的区别

  • exit是一个库函数,而_exit是一个系统调用接口函数
  • exit退出之前会刷新缓冲区,做退出的收尾工作,_exit直接退出,并不会刷新缓冲区

函数返回值
两个函数的返回值都是传入参数,用来保存我们的退出原因。

错误码

是一个全局变量,每个系统调用执行完毕之后都会重置errno这个变量,这个全局变量存储的就是当次调用的系统接口调用接口错误编号,当调用出错的时候可以使用perror和strerror函数对出错信息进行打印

进程等待

进程等待其实就是父进程等待子进程退出,避免僵尸进程,在默认的情况下是一个阻塞函数。
阻塞的概念:为了完成一项工作,如果当前条件不具备完成条件,则一直等待,知道最后完成
非阻塞的概念:为了完成一向工作,如果当前不具备完成条件,则立即报错返回

	   #include <sys/types.h>
       #include <sys/wait.h>
       pid_t wait(int *status);
       pid_t waitpid(pid_t pid, int *status, int options);

wait函数是等待任意一个子进程退出则退出
wait_pid默认是可以等待任意一个子进程退出则退出,当时我们可以设置我们的参数,可以回收指定的参数
waitpid
pid:当pid=-1的时候等待任意一个子进程,与wait函数类似,当pid>0的时候我们等待其进程id和pid相等的子进程退出则退出。
options:选择参数

  • WNOHANG :设置waitpid设置为非阻塞函数
  • WUNTRACED
  • WCONTINUED
    status:传入参数,是保存我们退出信息的
    status是一个int型4字节。但是我们的状态只使用了低16为,高八位存储子进程退出返回值,低七位保存了异常退出信号值,第八位是core dump标志(程序异常退出时是否保存运行信息)。
    在这里插入图片描述
  • 获得子进程推出码:(status>>8)&&0xff
  • 判断程序是否正常退出,信号值为0就是正常退出,否则不是正常退出,status&&0x7f,就可以得到我们的信号值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux--进程控制2 的相关文章

随机推荐

  • Linux _ Shell编程 — 变量

    一 shell脚本的基础知识 1 shell脚本的本质 语言的分类有 xff1a 编译性语言 C语言 C 43 43 语言 JAVA PHP Python等 xff0c 不同编译器编译的执行文件不同 xff0c 运行的平台也不尽相同 解释性
  • USART _ 两串口同时使用,冲突问题

    1 使用外设情况 xff1a 1 初始化了两个串口 xff1a 串口1以及串口2 xff0c 使用串口2DMA发送数据 xff0c 接收中断 接收数据 xff1b 使用串口1发送函数发送数据 xff0c 接收中断接收数据 xff1b 2 问
  • C语言 _ MakeFile(一)

    一 Make简介 工程管理器 xff0c 顾名思义 xff0c 是指管理较多的文件 Make工程管理器也就是个 自动编译管理器 xff0c 这里的 34 自动 34 是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量 xff0c
  • C语言_网络编程_SQLite3数据库项目 _ 在线词典

    一 项目分析 1 在线词典一般的饿运行过程 xff1a 例如 服务器端将用户信息和历史记录保存在数据库中 客户端输入用户和密码 xff0c 服务器端在数据库中查找 匹配 xff0c 返回结果 xff1b 2 项目的流程 定义数据库中表的结构
  • ARM体系结构与接口技术 —— ARM基础 及 指令

    一 ARM基础 1 ARM公司讲解 成立于1990年11月 前生为Acorn计算机公司 xff1b 主要设计ARM系列RISC处理器内核 xff1b 授权ARM内核给生产和销售半导体的合作伙伴 xff1b ARM公司不生产芯片 xff1b
  • 嵌入式基础_STM32F103C8T6从零开始建立一个项目(库函数)

    第一步 xff1a stm32f10x标准库下载 xff08 STSW STM32054 xff09 https www st com content st com zh products microcontrollers micropro
  • 自主实现一个minishell程序

    此时没有重定向功能 我们知道对于Linux xff0c shell就是个命令行解释器 xff0c 当我们输入相关的命令 xff0c 会去执行相关的操作 比如当我们输入ls a l命令 xff0c shell就会打印出当前目录的内容 xff0
  • FreeRTOS学习笔记——动态创建任务(STM32)

    1 任务创建和删除API函数 函数描述xTaskCreate动态创建一个任务xTaskCreateStatic静态创建一个任务xTaskCreateRestricted创建使用MPU进行限制任务 内存相关分配vTaskDelete删除一个任
  • FPGA uart串口收发verilog源码程序,适用于RS232 RS422

    FPGA uart串口收发verilog源码程序 xff0c 适用于RS232 RS422 xff0c 支持修改波特率 xff0c 数据位 xff0c 校验位 ID 3750670799663712
  • LED驱动IC TM1616,TM1650,TM1651替代兼容型号(VK,AIP)

    产品型号 xff1a VK1650 产品品牌 xff1a VINKA 永嘉微电 永嘉微 封装形式 xff1a SOP16 概述 VK1650 是一种带键盘扫描电路接口的 LED 驱动控制专用电路 内部集成有 MCU 输入输出控制数字 接口
  • CJSON中有关于在对象中放数组,数组中放对象,以及其解析

    CJSON数据的打包 创立一个键值对 xff1a 键为 34 status element 34 值为数组 数组中有大量对象的Cjson 数据结构为 key1 xff1a value1 key2 xff1a value2 的键值对结构 ke
  • STM32F407使用USART2外设进行DMA1发送以及接收未知长度的数据

    1 STM32的串口接收数据有三种方式可以选择 xff1a 1 1 轮询接收 在主循环中一直判断串口接收完成标志位是否置位 xff0c 如果置位则读取收到的数据 该种模式一般不会使用 xff0c 其缺点很明显 xff0c 当主函数在做其他工
  • STM32 CAN通信的学习笔记总结

    转载地址 xff1a STM32 CAN通信的学习笔记总结 xff08 从小白开始 xff09 目录 1 总体概述 1 1 基本概念1 2 通讯方式1 3 为什么使用CAN 1 4 CAN的协议及组成 2 上帝视角看CAN的通讯过程 2 1
  • Python学习:numpy库 数据量太大出现Memory Error问题的解决方法汇总

    python处理大训练集过程中经常会遇到的Memory Error问题 这里看了几位博主的解决方案进行了整理 xff0c 感谢分享 xff01 http chenqx github io 2014 10 29 Python fastest
  • 学习C++有没有必要学习boost库?

    学习C 43 43 有没有必要学习boost库 xff1f https www zhihu com question 39817943 学习 C 43 43 Boost 之前 xff0c 是否需要对 STL 很熟悉 xff1f https
  • char型指针数组和数组指针(char *a[]和char (*a)[])赋值方法

    char型指针数组和数组指针赋值方法 指针数组赋值数组指针赋值 指针数组赋值 指针数组是指所定义数组的每个数组元素都是一个相应数据类型的指针 xff0c 开设空间的操作可以应用循环语句进行 xff0c 例如 xff1a char p 10
  • 基于stm32的自定义通信协议-模拟串行通讯

    目录 一 背景 二 方案设计 三 课程作业实施 四 测试结果 五 部分代码 xff08 完整代码可主页联系作者 xff09 一 背景 题目 xff1a 通过数字通道进行两个计算机系统的通讯目标 xff1a 设计 实现一个用于数字通道串行通讯
  • 视觉SLAM学习笔记——目录与参考

    写在前面 xff1a 从18年开始接触自主机器人定位建图 xff0c 8月打开高翔的 视觉SLAM十四讲 以及视频教程正式进行系统学习 xff0c 现在也基本能看懂那些State of the art的paper与算法 但感觉自己对于一些细
  • 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

    回到目录 写在前面 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU紧耦合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09
  • linux--进程控制2

    在进程控制的章节我们讲解了我们的进程创建 xff0c 这章节对进程控制进行补充 xff0c 进程终止 在我们创建一个进程之后我们避免不了我们去终止我们的进程 终止场景 正常退出 xff0c 结果符合我们的预期正常退出 xff0c 结果不符合