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 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • bash "&" 不打印 "[1]+ Done "

    我在 bashrc 中调用一个脚本来打印打开终端时收到的新消息数 我希望该调用在访问网络时是非阻塞的 有时需要几秒钟 这意味着我无法使用终端直到完成 但是如果我输入 mailcheck 在我的 bashrc 中 它工作正常 但然后打印一个空
  • 如何获取 bash 中从 Ping 接收到的数据包的百分比?

    当 ping 主机时 我希望输出仅显示收到的数据包 已发送 5 个 的百分比 我想我需要使用grep不知怎的 但我不知道如何 我是 bash 编程的新手 这是我所在的地方 ping c 5 q host grep grep 中应该包含什么
  • 为什么 proc/ID/maps 有多个共享库条目

    我正在查看嵌入式Linux下的proc ID maps 我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样呢 40094000 400d9000 r xp 00000000 b3 09 723 system lib libc so
  • _dl_runtime_resolve -- 共享对象何时加载到内存中?

    我们有一个对性能要求很高的消息处理系统 最近我们注意到第一条消息比后续消息花费的时间要长很多倍 当它通过我们的系统时 会发生大量转换和消息增强 其中大部分是通过外部库完成的 我刚刚描述了这个问题 使用 callgrind 将仅一条消息的 运
  • 为什么 RHEL 上的 bash 中 `read -t` 没有超时?

    Why read t在 RHEL5 或 RHEL6 上从管道读取时不会超时 这是我的示例 在从管道读取数据时 我的 RHEL 盒子不会超时 tail f logfile log grep something read t 3 variabl
  • 有没有办法让 Linux CLI IO 重定向持久化?

    我有多个管道命令 如下所示 find options grep options xargs grep options 它们中的每一个都可能产生我不感兴趣的错误 权限错误 文件名空格错误等 因此 我想将所有错误重定向到 dev null 我知
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • 如何修复 /usr/bin/env 参数处理?

    我遇到了一个奇怪的问题 usr bin env 我设计了一个简单的脚本来显示问题 该脚本使用 Ruby 编写 但使用 Python 编写的类似脚本也会发生同样的情况 这是脚本 usr bin env ruby p ARGV 还有一个没有 u
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • /usr/bin/as:无法识别的选项“-EL”

    因此 在为我的1plus手机编译android内核时 经过3天的多次尝试 我放弃了并尝试在这里询问是否有人以前遇到过这个问题 这个错误对我来说有点模糊 但我觉得问题来自于我最近对 GNU Linux 发行版 Gentoo 的更改 它在不应该
  • 对于客户端服务器程序,并行接收多个客户端连接请求的最佳方法是什么?

    该程序是在 Linux 上用 C 语言开发的客户端服务器套接字应用程序 每个客户端都连接到一个远程服务器并将其自身记录为在线 在任何给定时间点很可能有多个客户端在线 所有客户端都尝试连接到服务器以将自己记录为在线 忙碌 空闲等 那么服务器如
  • Python 线程与 Linux 中的多处理

    基于此question https stackoverflow com questions 807506 threads vs processes in linux我假设创建新流程应该几乎和创造新线程在Linux中 然而 很少的测试显示出截

随机推荐

  • 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 结果不符合