news 2026/7/24 5:46:32

31、Linux进程管理实战:回收机制、exec族函数与路径操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
31、Linux进程管理实战:回收机制、exec族函数与路径操作

Linux进程管理实战:回收机制、exec族函数与路径操作

一、exec族函数:程序替换

1. 功能与原理

exec族函数的核心作用是程序替换:在当前进程空间中,用新程序的代码段、数据段替换原有程序,新程序执行完毕后,进程直接退出(不会返回原程序)。通常与fork搭配使用(父进程创建子进程,子进程执行exec替换程序)。

2. exec族函数对比

exec族包含6个函数,核心差异在于参数传递方式和程序路径查找方式,规律如下:

  • l(list):参数逐个列出,以NULL结尾
  • v(vector):参数存储在数组中,数组末尾以NULL结束
  • p(path):程序名无需完整路径,依赖系统PATH环境变量查找
  • e(env):自定义环境变量(本文重点讲解前4个常用函数)
函数原型特点示例
execl(const char *path, const char *arg, ...)完整路径+参数列表execl("/usr/bin/ls", "ls", "-l", NULL)
execlp(const char *file, const char *arg, ...)程序名(PATH查找)+参数列表execlp("ls", "ls", "-l", NULL)
execv(const char *path, char *const argv[])完整路径+参数数组char *argv[] = {"ls", "-l", NULL}; execv("/usr/bin/ls", argv)
execvp(const char *file, char *const argv[])程序名(PATH查找)+参数数组char *argv[] = {"ls", "-l", NULL}; execvp("ls", argv)

3. 实战代码解析

示例1:execl执行系统命令(17execl.c)
#include>#include.h>intmain(){// 执行firefox,打开谷歌浏览器(完整路径)execl("/usr/bin/firefox","firefox","https://www.google.com",NULL);perror("execl");// 若执行到此处,说明execl失败return0;}
  • 关键说明
    • 第一个参数必须是程序完整路径(/usr/bin/firefox
    • 后续参数是程序运行参数,最后必须以NULL结尾
    • execl执行成功,不会返回原程序,perror不会执行
示例2:execlp执行系统命令(18execlp.c)
#include>#include.h>intmain(intargc,char*argv[]){// 无需完整路径,依赖PATH环境变量查找firefoxexeclp("firefox","firefox","www.baidu.com",NULL);printf("看见就错了\n");// 执行到此处说明execlp失败return0;}
  • 核心优势:无需记忆程序完整路径,更简洁灵活
示例3:execv执行自定义程序(19execv.c)
#includeintmain(intargc,char*argv[]){// 执行自定义程序aaa,传递参数11、22、33、4execl("/home/linux/20251215/aaa","aaa","11","22","33","4",NULL);printf("看见就错了\n");// 执行失败时输出return0;}
  • 注意事项:自定义程序需提前编译(如gcc 2.c -o aaa),第一个参数为程序完整路径
示例4:execvp执行系统命令(20execvp.c)
#include>#include>intmain(intargc,char*argv[]){char*argv[]={"ls","-al","/bin","--color",NULL};// 程序名+参数数组,PATH查找lsexecvp("ls",argv);perror("execvp");return0;}
  • 适用场景:参数数量不确定时,用数组存储更灵活

二、system函数:执行Shell命令

1. 函数原型与原理

#include>intsystem(constchar*command);
  • 功能:执行Shell命令,内部实现为fork+exec+waitpid
  • 限制:不能执行修改父进程状态的命令(如cd),仅适用于信息输出、文件操作等无状态命令
  • 返回值:成功返回命令退出状态,失败返回-1

2. 实战代码(22system.c)

#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){system("ps aux");// 执行进程查看命令system("cd /home/linux");// 此命令不影响父进程工作路径printf("aaa\n");return0;}
  • 关键注意
    • system("cd /home/linux")仅在子进程中切换路径,父进程路径不变
    • 命令执行结果直接输出到终端,无需手动处理IO

三、工作路径操作:getcwd与chdir

1. 获取当前工作路径(getcwd)

#include.h>char*getcwd(char*buf,size_tsize);
  • 功能:获取当前进程的工作路径
  • 参数
    • buf:存储路径的字符数组
    • size:数组最大长度(建议预留1字节给结束符\0
  • 返回值:成功返回buf指针,失败返回NULL

2. 切换工作路径(chdir)

#includeintchdir(constchar*path);
  • 功能:切换当前进程的工作路径
  • 参数path为目标路径(绝对路径或相对路径)
  • 返回值:成功返回0,失败返回-1

3. 实战代码(23getcwd.c)

#include<stdio.h>#include<unistd.h>intmain(){charpath[1024]={0};// 获取初始工作路径getcwd(path,sizeof(path)-1);printf("path is %s\n",path);// 输出:path is /home/linux/20251215// 切换到上级目录chdir("../");getcwd(path,sizeof(path)-1);printf("path is %s\n",path);// 输出:path is /home/linux// 在新路径下创建文件FILE*fp=fopen("aaa","w");// 文件创建在/home/linux目录下return0;}
  • 核心应用:文件操作时,需先确认或切换工作路径,避免文件路径错误
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 6:24:20

最近在搞风光储联合发电系统的仿真,发现直驱风机和光伏逆变器的配合特别有意思。今天就跟大伙儿唠唠这个模型搭建时遇到的坑,顺便分享几个关键模块的调参心得

风光储simulink仿真模型&#xff0c;风机采用直驱风机&#xff0c;光伏为经逆变器外送实现并网&#xff0c;运行稳定&#xff0c;先看整个系统的骨架结构&#xff08;顺手在Simulink里拖出三个大框&#xff09;&#xff1a; 直驱永磁同步发电机带着变流器光伏阵列连着双级式逆变…

作者头像 李华
网站建设 2026/7/23 6:34:30

最小化门控记忆网络在风速条件分位数预测中的实践与应用

最小化门控记忆网络在不显著降低预测精度的前提下减少了训练时间。 在此基础上&#xff0c;提出了一种分位数回归与最小门控记忆网络相结合的风速条件分位数预测方法。 可以运用到负荷预测、风电功率等&#xff0c;可以直接替换数据运行。风速预测这活儿不好干&#xff0c;传统…

作者头像 李华
网站建设 2026/7/23 7:34:27

先给大伙儿拆解下五层电梯PLC程序的实现逻辑。这玩意儿核心是状态转移和信号竞争,咱们直接上硬核部分。(文末附IO表与接线说明)

五层电梯三菱plc程序有注释&#xff0c;有io分配表&#xff0c;电气接线图。 实现的功能如下。 (提供学习&#xff0c;由于文件形式发送) 功能:1、外呼梯功能&#xff1a;电梯门外有呼叫信号时&#xff0c;电梯运行到呼叫楼层停止&#xff0c;然后电梯开门到达一段时间后电梯关…

作者头像 李华
网站建设 2026/7/24 4:24:56

「码同学」2025VIP性能测试课程

「码同学」2025VIP性能测试课程&#xff1a;解锁高并发时代的“系统韧性”密码 在数字化业务爆发式增长的2025年&#xff0c;相关示例系统性能已成为企业竞争力的核心战场。从电商大促的瞬时流量冲击&#xff0c;到金融交易的毫秒级响应要求&#xff0c;性能测试工程师的角色正…

作者头像 李华
网站建设 2026/7/22 0:15:16

零基础转行AI产品经理:大模型学习路线与面试题库全攻略

本文分享了一位5年B端金融产品经理成功转行AI产品经理的完整经验。作者详细介绍了转行前的技术储备&#xff08;AI技术理解和AIGC项目经历&#xff09;、简历撰写技巧、面试流程与常见问题&#xff0c;以及求职过程中的学习方法。文章还提供了AI大模型学习路线、面试题库等实用…

作者头像 李华