news 2026/5/12 10:05:40

自学嵌入式day31,waitpid,system 函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式day31,waitpid,system 函数

waitpid 和 wait 函数

waitpid(-1, status, 0)等同于wait(status)
waitpid函数原型为pid_t waitpid(pid_t pid, int *status, int options)

参数说明:

  • pid取值决定回收的子进程范围:

    • <-1:回收指定进程组内的任意子进程。
    • -1:回收任意子进程(组内外)。
    • 0:回收与调用waitpid同进程组的所有子进程。
    • >0:回收指定 PID 的子进程。
  • status:存储子进程退出状态。若无需状态可设为NULL

  • options

    • 0:阻塞等待回收。
    • WNOHANG:非阻塞模式,需通过返回值判断是否回收成功(通常搭配循环使用)。

返回值:

  • 成功:返回被回收子进程的 PID。
  • 失败:返回-10(非阻塞模式下无子进程退出)。
  • 错误码:如EAGAIN表示资源暂时不可用。

exec 函数族

用于替换当前进程的代码和数据为新程序,不创建新进程(PID 不变)。

函数分类:
  1. execl

    int execl(const char *path, const char *arg, ...);
    • path:新程序的完整路径(如"/bin/ls")。
    • arg:参数列表,以NULL结尾(如"ls", "-al", "/bin", NULL)。
  2. execlp

    int execlp(const char *file, const char *arg, ...);
    • file:通过环境变量PATH查找程序文件名(如"firefox")。
  3. execv

    int execv(const char *path, char *const argv[]);
    • argv:参数数组(如{"ls", "-al", "/bin", NULL})。
  4. execvp

    int execvp(const char *file, char *const argv[]);
    • file:通过PATH查找文件名。

注意:

  • 调用成功后,原进程代码被替换,后续代码(如printf)不会执行。
  • 若需调用自身程序,第一个参数需为完整路径。

system 函数

执行 Shell 命令(如文件操作或信息输出):

int system(const char *command);
  • command:Shell 命令字符串。
  • 返回值:
    • -1:失败(如fork出错)。
    • 其他:命令的退出状态。

实现原理:内部通过fork+exec完成。


工作目录相关函数

  1. 获取当前路径

    char *getcwd(char *buf, size_t size);
    • buf:存储路径的缓冲区。
    • size:缓冲区大小。
    • 返回值:成功返回buf,失败返回NULL
  2. 切换工作目录

    int chdir(const char *path);
    • path:目标路径。
    • 返回值:0成功,-1失败。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 18:14:06

泛型继承实战指南(高级程序员必知的3个隐秘特性)

第一章&#xff1a;泛型的继承在面向对象编程中&#xff0c;继承是构建可复用、可扩展代码结构的核心机制。当泛型与继承结合使用时&#xff0c;能够实现更加灵活和类型安全的类层次结构。泛型类可以像普通类一样被继承&#xff0c;子类可以固定父类中的类型参数&#xff0c;也…

作者头像 李华
网站建设 2026/5/12 6:38:49

Symfony 8路由系统重构:从延迟2秒到毫秒级响应的优化之路

第一章&#xff1a;Symfony 8路由系统重构&#xff1a;从延迟2秒到毫秒级响应的优化之路在 Symfony 8 的新版本中&#xff0c;路由系统经历了一次深度重构&#xff0c;显著提升了请求解析性能。以往在复杂路由配置下可能出现接近 2 秒的响应延迟&#xff0c;如今已优化至毫秒级…

作者头像 李华
网站建设 2026/5/10 5:39:07

GraphQL + PHP缓存优化:99%开发者忽略的6个关键实践

第一章&#xff1a;GraphQL PHP缓存优化的核心挑战在构建高性能的现代Web应用时&#xff0c;GraphQL与PHP的结合为开发者提供了灵活的数据查询能力&#xff0c;但同时也带来了显著的缓存优化难题。由于GraphQL允许客户端按需请求字段&#xff0c;传统的基于完整页面或接口响应…

作者头像 李华
网站建设 2026/5/10 17:04:14

5、Linux 文件压缩、归档与文本文件管理全解析

Linux 文件压缩、归档与文本文件管理全解析 1. Linux 中的文件压缩 在 Linux 系统里,文件压缩是一项常见且重要的操作,它能有效节省磁盘空间。下面为你介绍几种常用的压缩工具及其使用方法。 1.1 xz 压缩 xz 是 Linux 中空间利用率最高的压缩工具,不过它的压缩速度相对较…

作者头像 李华
网站建设 2026/5/11 13:11:20

6、Linux 文本文件管理实用指南

Linux 文本文件管理实用指南 在 Linux 系统的操作环境中,系统管理员、开发者以及普通用户常常会与文本文件、配置文件和日志文件打交道。这些文件的大小不一,有的文件体积庞大,有的则属于中小型文件。文件中的数据经常需要查看、更新或提取。接下来,我们将详细介绍如何在 …

作者头像 李华
网站建设 2026/5/11 18:17:42

Rust-PHP扩展编译优化实战(从入门到性能翻倍的完整路径)

第一章&#xff1a;Rust-PHP扩展编译优化概述在现代高性能 Web 应用开发中&#xff0c;PHP 作为广泛使用的脚本语言&#xff0c;其执行效率常面临瓶颈。通过引入 Rust 编写 PHP 扩展&#xff0c;不仅可以利用 Rust 的内存安全与零成本抽象特性&#xff0c;还能显著提升关键路径…

作者头像 李华