Linux中的exec族函数

exec 系列函数用于替换当前进程的用户空间代码和数据,从而执行一个新的程序。调用 exec 系列函数不会创建新的进程,但会用新程序的代码和数据替换当前进程,因此调用 exec 后,进程的 ID 保持不变,但进程的行为变为执行新的程序

exec 系列函数有六个,分别是:

execl

int execl(const char *path, const char *arg, ...);

功能:使用指定的路径名执行新程序,参数一个一个列出,最后一个参数必须为 NULL 以标记结束。

execv

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

功能:使用指定的路径名执行新程序,参数以数组的形式传递。

execle

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

功能:与 execl 类似,但可以传递环境变量数组 envp

execve

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

功能:与 execv 类似,但可以传递环境变量数组 envpexecve 是真正的系统调用。

execlp

int execlp(const char *file, const char *arg, ...);

功能:与 execl 类似,但使用文件名 file 作为参数,当文件名中不含 / 时,会根据 PATH 环境变量寻找可执行文件。

execvp

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

功能:与 execv 类似,但使用文件名 file 作为参数,当文件名中不含 / 时,会根据 PATH 环境变量寻找可执行文件。

函数参数解析

路径名 vs. 文件名

使用路径名的函数(如 execl, execv, execle, execve)需要明确指定可执行文件的完整路径。

使用文件名的函数(如 execlp, execvp)会根据 PATH 环境变量查找可执行文件。

参数表传递

l 表示 list:参数需要一个一个列出。

v 表示 vector:参数以数组形式传递。

环境变量

e 结尾的函数(如 execle, execve)可以传递一个环境变量数组。

没有 e 结尾的函数则继承父进程的环境变量。

代码示例

char *const ps_argv[] = {"ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL};
char *const ps_envp[] = {"PATH=/bin:/usr/bin", "TERM=console", NULL};

// 使用不同的 exec 函数执行 ps 命令
execl("/bin/ps", "ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL);
execv("/bin/ps", ps_argv);
execle("/bin/ps", "ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL, ps_envp);
execve("/bin/ps", ps_argv, ps_envp);
execlp("ps", "ps", "-o", "pid,ppid,pgrp,session,tpgid,comm", NULL);
execvp("ps", ps_argv);

ps_argv[]:

这是一个参数数组,传递给 ps 命令,用于指定显示进程信息的格式。

"ps" 是命令名。

"-o" 是选项,用于指定自定义输出格式。

"pid,ppid,pgrp,session,tpgid,comm"

指定了输出的字段(进程ID、父进程ID、进程组ID、会话ID、控制终端的进程组ID、命令名)。

NULL 是数组的结束标志。

ps_envp[]:

这是一个环境变量数组,传递给 ps 命令。

"PATH=/bin:/usr/bin" 指定了查找可执行文件的路径。

"TERM=console" 设置终端类型为 console

NULL 是数组的结束标志

execl

  • 使用绝对路径 /bin/ps 执行 ps 命令。
  • 参数依次为 "ps", "-o", "pid,ppid,pgrp,session,tpgid,comm",最后 NULL 结束。
  • 适用于知道完整路径并手动列出所有参数的情况。

execv

  • 使用绝对路径 /bin/ps 执行 ps 命令。
  • 参数通过数组 ps_argv[] 传递。
  • 适用于需要动态构建参数列表的情况。

execle

  • execl 类似,但额外传递了环境变量数组 ps_envp[]
  • 适用于需要在新程序中设置特定环境变量的情况。

execve

  • execv 类似,但额外传递了环境变量数组 ps_envp[]
  • 这是底层的系统调用函数,通常其他 exec 函数也是调用它实现的。

execlp

  • execl 类似,但只提供文件名 "ps" 而非路径。
  • 系统会根据 PATH 环境变量来查找 ps 的可执行文件位置。
  • 适用于不想指定绝对路径、依赖系统自动查找的情况。

execvp

  • execv 类似,但只提供文件名 "ps" 而非路径。
  • 系统会根据 PATH 环境变量来查找 ps 的可执行文件位置。

代码执行效果

在每种 exec 函数调用成功后,当前进程的用户空间代码和数据将被新的 ps 程序替换,进程会从 ps 程序的启动例程开始执行。

如果 exec 调用失败,函数会返回 -1 并设置 errno 以指示错误原因。

因为 exec 系列函数不会创建新进程,所以进程 ID 不会变化。

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

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

相关文章

前端基础4

本节内容: 1.CSS的弹性布局,也称Flex布局 2.Vue2的生命周期 一、Flex布局 弹性布局是前端页面布局最常用的方式之一,通常使用四个属性。 1.创建盒子 先创建一个盒子并为其添加一些样式可以更直观的体验弹性布局,代码如下&#…

keepalived保活nginx1,nginx2

1 下载两个小玩意 yum -y install keepalived yum install psmisc -y 2 配置nginx1,2自启脚本 vim /root/shell/check-nginx.sh 我的脚本放在root/shell里 #!/bin/bash #获取nginx正在运行的进程数 npsnumps -C nginx --no-header | wc -lif [ $n…

企业级WEB应用服务器TOMCAT攻略

目录 一 WEB技术 1.1 HTTP协议和B/S 结构 二 WEB框架 2.1 web资源和访问 2.2 后台应用架构 三 tomcat的功能介绍 3.1 安装 Tomcat 3.2 tomcat的文件结构和组成 3.3 生成tomcat的启动文件 四 结合反向代理实现tomcat部署 4.1 常见部署方式介绍 4.2 利用 nginx 反向代…

第2章-01-网站中的资源介绍

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

性能测试-性能监控分析与调优(三)《实战-CPU瓶颈分析、内存问题分析、gc、tomcat性能调优,数据库监控-redis\mysql》

性能监控 使用命令监控 cpu瓶颈分析 top命令 在进行性能测试时使用top命令,界面如下 上图可以看出 - CPU 概况区: %Cpu(s): - us(用户进程占用CPU的百分比), 和 sy(系统进程占用CPU的百分比) 的数…

热门奥运冠军代言费用贵,中小微企业怎么找冠军代言?

巴黎奥运会的热潮未退,这个月运动员代言的比例显著上升,比如游泳冠军潘展乐拿下携程等5个代言,孙颖莎手握可口可乐等7个代言。越来越多的企业和品牌通过冠军代言的形式来提升自身的品牌形象和市场竞争力。运动员代表着健康、拼搏和胜利&#…

thinkphp5漏洞分析之文件包含

目录 一、环境 二、开始研究 三、漏洞分析 四、漏洞修复 五、攻击总结 一、环境 thinkphp官网下载 创建 application/index/view/index/index.html 文件,内容随意(没有这个模板文件的话,在渲染时程序会报错) 二、开始研究 创…

【机器人学】7-2.六自由度机器人自干涉检测-计算圆柱体的上下圆心坐标【附MATLAB代码】

目录 前言 机械臂几何参数 机器等效圆柱体坐标确定 MATLAB代码 前言 上一章介绍了机器人自干涉检测的总体算法,提出了算法的三个核心: 一 根据机械臂的几何数据以及DH参数,确定机械臂等效的圆柱体的上下圆心坐标。 二 将一个圆柱体旋转到…

《少年白马醉春风》圆满收官 白澍“琅琊王”萧若风热度飙升

由陈宙飞执导,周木楠编剧,侯明昊、何与、胡连馨领衔主演,夏之光、姜贞羽特别出演,完颜洛绒、白澍等主演的古装武侠剧《少年白马醉春风》于昨日收官,大结局播出后,粉丝们直呼没看够!对于剧中角色…

Qt Creator安装配置指南

1.官网下载在线安装包 官网地址: https://www.qt.io/download-dev#eval-form-modal 2.双击在线安装包按引导流程安装qt 3.选择自己要配置的qt环境版本 3.1如果要选中低版本的qt环境我这里安装的是qt5.15.2的(其他低版本也一样的),要勾选上Archive(存…

vulnhub靶场 — NARAK

下载地址:https://download.vulnhub.com/ha/narak.ova Description:Narak is the Hindu equivalent of Hell. You are in the pit with the Lord of Hell himself. Can you use your hacking skills to get out of the Narak? Burning walls and demons are around every cor…

AI安全-文生图

1 需求 2 接口 3 示例 大模型图像安全风险探析 - 先知社区 前言 文生图模型是一种新兴的人工智能技术,它通过对大规模文本数据的学习,能够生成逼真的图像。这种模型包含两个主要组件:一个文本编码器和一个图像生成器。 文本编码器接收文本输入,并将其转换为一种数字化的表示…

JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表

项目介绍 一款免费的数据可视化报表工具,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完…

tomcat利用 nginx 反向代理

利用 nginx 反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个 tomcat 主机 利用 nginx 指令 proxy_pass 可以向后端服务器转发请求报文 , 并且在转发时会保留客户端的请求报文中的 host首部 实现 tomcat 中的负载均衡 动态服务器的…

qt-18 程序启动画面

程序启动画面 screen.hscreen.cppmain.cpp运行图启动图片启动后程序 screen.h #ifndef SCREEN_H #define SCREEN_H#include <QMainWindow>class Screen : public QMainWindow {Q_OBJECTpublic:Screen(QWidget *parent nullptr);~Screen(); }; #endif // SCREEN_Hscreen…

代码随想录算法训练营day48:单调栈

目录 739. 每日温度 503.下一个更大元素II 分析&#xff1a; 42. 接雨水 本质&#xff1a; 暴力解法 分析&#xff1a; 双指针优化 单调栈 84.柱状图中最大的矩形 分析&#xff1a; 双指针&#xff1a; 单调栈 739. 每日温度 力扣题目链接(opens new window) 请根…

为什么越来越多的IT青年转行网络安全?

目前&#xff0c;我国互联网已经从爆发增长期进入平稳发展阶段&#xff0c;同时每年大量计算机相关专业的毕业生涌入就业市场&#xff0c;导致IT行业逐渐趋于饱和状态&#xff0c;甚至出现裁员现象&#xff0c;去年很多大厂都有裁员&#xff0c;不少程序员再就业成了难题。 面…

Cache地址相联映像

直接相联映像&#xff1a;硬件电路直接连接 全相联映像; 电路难于设计和实现&#xff0c;只适用于小容量Cache&#xff0c;冲突率低 组相联映像&#xff1a;直接相联与全相联的折中。 冲突率 &#xff08;高&#xff0c;中&#xff0c;低&#xff09; 电路复杂度 其他 直接…

VSCode配置ssh免密连接远程服务器

我配置了免密设置(Windows利用ssh免密码登录Linux)&#xff0c;git bash已经能够正常连接了&#xff0c;但是vscode还是不行&#xff0c;很奇怪。 VSCode报错信息&#xff1a; [17:55:50.360] SSH Resolver called for "ssh-remote106.52.2.19", attempt 5, (Recon…

一文了解 Vue3 的 nextTick 大致信息

nextTick 是 Vue 3 中用于完成数据绑定和 DOM 更新后执行的方法&#xff0c;非常有用&#xff0c;也是 Vue 的一道比较常见的面试题。 1. 基本用法 nextTick 是一个异步方法&#xff0c;它允许我们在下一个 DOM 更新后执行回调函数。当更改了响应式数据并需要在更新后的 DOM …