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

20250826的学习笔记

一、wait

pid_t wait(int *status);

功能:

        该函数可以阻塞等待任意子进程退出并回收该进程的状态。一般用于父进程回收子进程状态。

参数:

        status进程退出时候的状态

注:

        如果不关心其退出状态一般用NULL表示。

        如果要回收进程退出状态,则用WEXITSTATUS回收。

返回值:

        成功        回收的子进程pid

        失败        -1;

描述

用法

WIFEXITED(status)

子进程正常退出

if (WIFEXITED(status)) { ... }

WEXITSTATUS(status)

获取退出状态码

int exit_code = WEXITSTATUS(status);

WIFSIGNALED(status)

子进程被信号终止

if (WIFSIGNALED(status)) { ... }

WTERMSIG(status)

获取终止信号的编号

int signal = WTERMSIG(status);

WIFSTOPPED(status)

子进程被暂停

if (WIFSTOPPED(status)) { ... }

WSTOPSIG(status)

获取暂停信号的编号

int signal = WSTOPSIG(status);

WIFCONTINUED(status)

子进程已继续运行

if (WIFCONTINUED(status)) { ... }

注:

1)如果所有的子进程都在运行,在阻塞

2)如果一个子进程终止,正在等待的父进程则获得终止状态,获得子进程的状态后,立刻返回。

3)如果没有子进程,则立即出错退出。

二、waitpid

pid_t waitpid(pid_t pid, int *status, int options);

功能:

        用于等待特定子进程状态改变并获取其信息的核心系统调用

参数:

        pid_t pid:

                ① < -1      回收指定进程组内的任意子进程

                ②  -1        回收任意子进程,组内外

                ③   0        回收和当前调用waitpid一个组的所有子进程,组内

                ④ >0        回收指定ID的子进程

        eg:waitpid (-1,a,0) == wait(a);

        status:

                子进程退出时候的状态,如果不关注退出状态用NULL。

        options 选项:

                0表示回收过程会阻塞等待

                WNOHANG 表示非阻塞模式回收资源。

返回值:

        成功        返回接收资源的子进程pid

        失败        -1

三、exec

exec系列函数是 Linux/Unix 系统编程中至关重要的一组函数。它们用于将当前进程的映像替换为一个新的程序。理解 exec 是理解进程创建和系统命令执行的基础。

核心概念

  • 不是创建新进程:exec 不会创建一个新的进程。它是在当前进程的上下文中,停止执行原有的程序代码,转而加载并执行一个新的程序。

  • 进程ID不变:调用 exec 后,进程ID(PID)、父进程ID(PPID)、文件描述符、信号处理方式等大部分属性保持不变,但进程的代码段、数据段、堆栈段被新程序完全替换。

  • 成功不返回:如果 exec 函数执行成功,它永远不会返回,因为原来的代码已经被替换了。

  • 失败才返回:只有发生错误时(如找不到要执行的程序),exec 才会返回 -1,并设置 errno


exec 函数家族

exec 函数族有多个变体,它们功能相同(都是加载新程序),但参数传递方式不同。名字中的字母揭示了它们的区别:

函数原型

参数查找方式

是否使用环境变量 PATH

参数传递方式

int execl(const char *path, const char *arg0, ..., (char *) NULL);

路径

         否

列表 (List)

int execv(const char *path, char *const argv[]);

路径

         否

数组 (Vector)

int execle(const char *path, const char *arg0, ..., (char *) NULL, char *const envp[]);

路径

         否

列表 + 环境变量

int execve(const char *path, char *const argv[], char *const envp[]);

路径

         否

数组 + 环境变量

int execlp(const char *file, const char *arg0, ..., (char *) NULL);

文件名

         是

列表

int execvp(const char *file, char *const argv[]);

文件名

         是

数组

http://www.dtcms.com/a/353304.html

相关文章:

  • TDengine IPv6 支持用户手册
  • 盛大启幕!融智兴科技亮相 IOTE 2025 深圳国际物联网展
  • Mysql——调优
  • 从PostgreSQL到人大金仓(KingBase)数据库迁移实战:Spring Boot项目完整迁移指南
  • Python常见设计模式2: 结构型模式
  • jenkins集成liquibase
  • web中的过滤器和拦截器
  • LaTeX论文转word插入mathtype公式
  • KRaft vs ZooKeeper为何迁移、差异全览与落地实践
  • open3D学习笔记
  • 微软研究院最新tts模型VIBEVOICE解析
  • 配送算法16 A Deep Reinforcement Learning Approach for the Meal Delivery Problem
  • postgreSql远程连接数据库总是超时断开?
  • c#联合vision master 的基础教程
  • linux安装containerd
  • 如何使用 Xshell 8 连接到一台 CentOS 7 电脑(服务器)
  • MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
  • 学习 Android (十七) 学习 OpenCV (二)
  • 【PHP】数学/数字处理相关函数汇总,持续更新中~
  • 极限RCE之三字节RCE
  • 嵌入式学习日记(35)TCP并发服务器构建
  • 指纹手机应用核心技术解析:从识别到智能交互
  • 搭建域服务器
  • 毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)
  • ChatGPT登录不进怎么办?
  • NumPy广播机制:高效数组运算的秘诀
  • 预测模型及超参数:2.传统机器学习:PLS及其改进
  • 守术,明法,悟道
  • 欧盟《人工智能法案》生效一年主要实施进展概览(二)
  • 如何借助文档控件 TX Text Control 轻松优化 PDF 文件大小?