【Linux--进程控制】

目录

  • 一、进程等待
    • 1.1进程等待方法
    • 1.2获取子进程status
  • 二、进程替换
    • 2.1单进程版本--最简单得程序替换
    • 2.2 进程替换得原理
    • 2.3 多进程版本--验证各种程序替换接口
    • 2.4 总结

一、进程等待

1.1进程等待方法

问题1:进程等待是什么?
通过系统调用wait/waitpid,来进行对子进程状态检测与回收的功能。
问题2:为什么要进程等待
僵尸进程无法被杀死,需要进程等待来杀掉它,进而解决内存泄漏问题
我们需要通过进程等待来获取子进程的退出情况–了解子进程的任务执行得怎么样。
问题3:怎么使用进程等待
wait方法

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

waitpid方法

pid_ t waitpid(pid_t pid, int *status, int options); 返回值:
当正常返回的时候waitpid返回收集到的子进程的进程ID;
如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;
如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在; 参数: pid:
Pid=-1,等待任一个子进程。与wait等效。 Pid>0.等待其进程ID与pid相等的子进程。 status:
WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)
WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码) options:
WNOHANG: 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进 程的ID。

1.2获取子进程status

  • wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。
  • 如果传递NULL,表示不关心子进程的退出状态信息。
  • 否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。
  • status不能简单的当作整形来看待,可以当作位图来看待,具体细节如下图(只研究status低16比特位):
    在这里插入图片描述
  • 进程等待(阻塞)

在这里插入图片描述

  • 进程等待(非阻塞)
    在这里插入图片描述

二、进程替换

2.1单进程版本–最简单得程序替换

在这里插入图片描述

2.2 进程替换得原理

在这里插入图片描述
补充:
1.现场:程序替换成功之后,"exec"后续的代码不会执行。替换失败后才可能执行后续的代码。
在这里插入图片描述
2.

2.3 多进程版本–验证各种程序替换接口

在这里插入图片描述

2.4 总结

事实上,只有execve是真正的系统调用,其它五个函数最终都调用 execve,所以execve在man手册 第2节,其它函数在
man手册第3节。这些函数之间的关系如下图所示。
下图exec函数族 一个完整的例子:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法:笛卡尔平面坐标系上,若干连接点形成线,剔除距离小于阈值的点,Kotlin

算法&#xff1a;笛卡尔平面坐标系上&#xff0c;若干连接点形成线&#xff0c;剔除距离小于阈值的点&#xff0c;Kotlin const val THRESHOLD 0.6f //距离小于这个点将被剔除。data class Point(val x: Float, val y: Float)fun removeNearbyPoint(points: List<Point>…

【数电笔记】逻辑代数的基本定律、常用公式

说明&#xff1a; 笔记配套视频来源&#xff1a;B站 逻辑代数的基本定律 1. 常量间的运算 2. 逻辑变量与常量的运算 3. 与普通代数相似的定律 4. 摩根定律&#xff08;反演律&#xff09; 5. 等式证明方法例题 逻辑代数的常用公式 1. 吸收律 2. 冗余律 3. 示例应用 4. 关于异…

conda 安装指定Version的指定Build

入下图&#xff0c;我想装cudnn的7.6.5的指定Build版本cuda10.0_0 应该使用如下命令&#xff1a; mamba install cudnn7.6.5cuda10.0_0 没有mamba用conda install也可以

快手获客技巧:轻松获取高转化率的潜在客户!

**一、引言** 随着互联网的发展&#xff0c;越来越多的企业开始关注短视频平台&#xff0c;尤其是快手。作为中国最大的短视频平台之一&#xff0c;快手拥有庞大的用户群体和丰富的视频内容。通过掌握快手获客技巧&#xff0c;企业不仅可以获取更多潜在客户&#xff0c;还能提高…

Flash学习

FLASH介绍 FLASH是常用的&#xff0c;用于存储数据的半导体器件&#xff0c;它具有容量大&#xff0c;可重复擦写&#xff0c;按“扇区/块”擦除、掉电后数据可继续保存的特性。 常见的FLASH有NOR FLASH和NAND FLASH。 NOR和NAND是两种数字门电路&#xff0c;可以简单地认为F…

简述MyBatis、MyBatis-Plus、以及MyBatis-Plus的简单运用

什么是MyBatis MyBatis是一个开源的Java持久层框架&#xff0c;用于简化与关系型数据库的交互。它通过将SQL语句与Java代码进行分离&#xff0c;提供了一种优雅的方式来处理数据库操作。 MyBatis的核心思想是将SQL语句与Java方法进行映射&#xff0c;使得开发人员可以通过配置…

《ChatGPT实操应用大全》探索无限可能

&#x1f5e3;️探索ChatGPT&#xff0c;开启无限可能&#x1f680; 文末有免费送书福利&#xff01;&#xff01;&#xff01; ChatGPT是人类有史以来最伟大的发明。他能写作、绘画、翻译、看病、做菜、编程、数据分析、制作视频、解高等数学题…&#xff0c;他会的技能…

FPGA 常用代码

边沿检测 Verilog边沿检测是数字电路设计中常用的方法之一。它是一种检测输入信号边沿变化的技术&#xff0c;用于实现时序控制、数据采集和数字信号处理等功能。其基本原理是通过触发器检测输入信号的状态变化&#xff0c;并触发相应的逻辑操作。 // 边沿检测模块 // 使用两…

docker踩坑记录:docker容器创建doris容器间无法通讯问题

背景&#xff1a; 开发大数据平台&#xff0c;使用doris作为数据仓储&#xff0c;使用docker做集群部署&#xff0c;先进行开发环境搭建&#xff0c;环境为BE1;FE1&#xff0c;原来使用官方例子&#xff0c;但是官方例子是创建了一个bridge使用172.20.80.0/24通讯&#xff0c;…

WPF Mvvm模式下面如何将事件映射到ViewModel层

前言 平常用惯了Command绑定,都快忘记传统的基于事件编程模式了,但是Commond模式里面有个明显的问题,就是你无法获取到事件源的参数。很多大聪明肯定会说,这还不简单,通过自己写控件,给控件加个自定义属性不就行了,想要啥事件就写啥事件进去,完全自主可控。但是对于写…

链式栈的结构与基本操作的实现(初始化,入栈,出栈,获取元素个数,判空,清空,销毁)

目录 一.链式栈的栈顶在哪里? 二.链栈的结构: 三.链式栈的实现: 四.链式栈的总结: 一.链式栈的栈顶在哪里? 二.链栈的结构: typedef struct LSNode{int data;struct LSNode* next;}LSNode ,*PLStack; //链栈的节点.由于栈顶在第一个数据节点,所以不需要top指针 三.链式…

基于SpringBoot高校心理教育辅导设计与实现

摘 要 随着Internet技术的发展&#xff0c;心理教育辅导系统应运而生&#xff0c;心理教育辅导系统为用户提供了一个更为便利的心理测试咨询平台。所以&#xff0c;为了充分满足高校学生心理教育辅导的需求&#xff0c;特开发了本高校心理教育辅导系统。 本高校心理教育辅导系统…

Python for循环及用法详解

for-in 循环专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。 for-in 循环的语法格式如下 for 变量 in 字符串&#xff5c;范围&#xff5c;集合等&#xff1a;statements 对于上面的语法格式有以下两点说明&#xff1a; for-in 循环中的变量的值受 for-in 循环控…

gstreamer移植

参考 arm-linux交叉编译Gstreamer&#xff08;重要&#xff09;gstreamer移植qnx(四)&#xff1a;交叉编译qnx版本的gstreamer插件库&#xff08;重要&#xff09;gstreamer交叉编译关于linux&#xff1a;GStreamer上的“黑名单”是什么意思&#xff1f;gstreamer 环境变亮设置…

PHP实践:用ThinkPHP6完整实现用户分页功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

太阳能路灯系统在道路照明中的应用

太阳能路灯作为一种极为科学和环保的光源利用形式&#xff0c;一直以来备受关注&#xff0c;但是&#xff0c;目前虽然有很多技术可以证明太阳能路灯的可行性&#xff0c;不过&#xff0c;如何真正的将太阳能路灯应用到道路照明之中&#xff0c;还是需要进行深入分析和探讨的。…

10个让UI设计更轻松的工具

UI设计软件对设计师来说非常重要。UI设计工具的使用是否直接影响到最终结果的质量&#xff0c;然后有人会问&#xff1a;UI界面设计使用什么软件&#xff1f;这里有一些UI设计师和那些对UI设计感兴趣的朋友列出了10个易于使用和免费的UI设计软件。 即时设计 即时设计是一款免…

腾讯云避坑——无法远程root登录

因为各种原因&#xff0c;最近需要使用腾讯云来代替阿里云。 但在ubuntu18/20的服务器中&#xff0c;我使用另一个电脑试图用scp命令来拷贝服务器中的一些文件&#xff0c;命令为: scp root服务器ip:文件目录 本地目录但一直显示密码错误。 原因是腾讯云ubuntu系统在创建时并不…

了解SpireCV如何利用G1吊舱进行点击跟踪

功能概述 SpireCV-SDK是一个专为智能无人系统打造的边缘实时感知SDK库。该库能够控制无人机的相机和吊舱&#xff0c;包括拍照、录像、推流等功能&#xff0c;并可以保存视频和进行推流。此外&#xff0c;SpireCV-SDK还集成了目标检测、识别与跟踪功能&#xff0c;以实现更智能…

关于加强型葡萄酒的类型有哪些?

加强型葡萄酒指的是在酿造过程中或酿造完后&#xff0c;添加酒精提高葡萄酒酒精度的葡萄酒&#xff0c;一般加强型葡萄酒的酒精度数都能达到15度以上。那么&#xff0c;云仓酒庄的品牌雷盛红酒分享加强型葡萄酒的类型有哪些呢&#xff1f; 云仓酒庄多品牌多代言运营模式&#…