一、什么是exec函数族

fork函数用于创建一个子进程,该子进程几乎拷贝了父进程的全部内容。子进程往往要调用一种exec函数以执行另一个程序。exec函数族提供了一种在进程中启动另一个进程执行的方法。它可以根据指定的目录和文件名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完了以后,原进程内容除了进程号外,其他全部被替换了换核不换壳。如果某个进程想同时执行另一个程序,它就可以调用fork创建一个子进程,然后再子进程中调用任何一个exec函数,这样看起来就像通过执行应用程序而产生了一个新进程一样。

二、exec函数族语法

int execlp(const char *file,const char *arg,...)  加载一个进程,借助PATH环境变量。成功无返回;失败返回-1.                                                                                                                                      参数1:要加载的程序的名字。该函数需要配合PATH环境变量来使用,当PATH中的所有目录搜索后若没有则出错返回。该函数通常用来调用系统程序。如:ls、data、cp、cat等命令。

int execl(const char *path,const char *arg,...)  加载一个进程,通过路径+程序名来加载。成功无返回;失败返回-1.                                                                                                                                 对比execlp,如加载"ls"命令带有-l,-F参数
execlp("ls", "ls", "-l", "-F", NULL);         使用程序名在PATH中搜索。
execl("/bin/ls", "ls", "-l", "-F", NULL);    使用参数1给出的绝对路径搜索。

int execvp(const char *file,const char *argv[])  加载一个进程,使用自定义环境变量env                  变参形式: ①... ② argv[]  (main函数也是变参函数,形式上等同于 int main(int argc, char *argv0, ...)) 
变参终止条件:① NULL结尾 ② 固参指定
execvp与execlp参数形式不同,原理一致。

exec函数族一般规律
exec函数一旦调用成功即执行新的程序,不返回。只有失败才返回,错误值-1。所以通常我们直接在exec函数调用后直接调用perror()和exit(),无需if判断。
l (list)            命令行参数列表
p (path)            搜素file时使用path变量
v (vector)            使用命令行参数数组
e (environment)    使用环境变量数组,不使用进程原有的环境变量,设置新加载程序运行的环境变量事实上。

只有execve是真正的系统调用,其它五个函数最终都调用execve

三、代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>int main(int argc, char *argv[])
{ pid_t pid;pid=fork();  //创建子进程char *arg[] = {"ls","-a","/dev",NULL};if (-1 == pid) //创建失败{perror("fork");return -1;}else if (pid > 0){while(1){sleep(1);// printf("######################\n");wait(NULL);exit(0); //结束父进程}}else if (pid == 0)while(1){if(execlp("sl","-h", NULL) == -1) //执行跑火车程序//if(execl("/bin/ls","ls","-l","./",NULL) == -1) //列出当前目录文件,即执行ls -l .///if(execv("/bin/ls", arg) == -1) //列出/dev目录下的文件,即执行ls -a /dev{perror("execlp");exit(1);}exit(0); //结束子进程}return 0;
} 

C语言————exec函数族相关推荐

  1. C语言进程(第三章,exec函数族,execl,execlp,execle,execv,execvp,execve)

    C语言进程(第三章,exec函数族,execl,execlp,execle,execv,execvp,execve) 简介 本文讲解C语言进程中的exec函数族相关知识,相关函数有excel,exec ...

  2. UNIX再学习 -- exec 函数族

    我们在讲,文件I/O的时候,简单提到过 exec 函数,讲到 vfork 的时候,也有用到.下面我们来详细介绍下它. 参看:UNIX再学习 -- 文件I/O  参看:UNIX再学习 -- 函数 for ...

  3. Linux进程实践(3) --进程终止与exec函数族

    进程的几种终止方式 (1)正常退出 从main函数返回[return] 调用exit 调用_exit/_Exit (2)异常退出 调用abort   产生SIGABOUT信号 由信号终止  Ctrl+ ...

  4. Linux学习日记15——exec函数族、回收子进程

    学习视频链接 黑马程序员-Linux系统编程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1KE411q7ee?p=95&spm_id_from ...

  5. 2022-1-14 牛客C++项目 —— exec函数族学习

    复习时候用的问题: 1.函数族是什么? 2.exec 函数族的作用是什么? 3.如果在父进程函数里面使用 exec 会有什么样的结果?有什么更好的做法? 4.execl 函数.execlp 函数 函数 ...

  6. exec函数族 与 system函数

    文章目录 1. exec函数族 exec函数与fork函数 2. system函数 1. exec函数族 exec函数族主要是将要执行的进程的用户空间覆盖之前进程的用户空间来执行自己的代码,所以之前进 ...

  7. 【Linux】进程控制(exec函数族)的理解和使用

    文章目录 1. 进程程序替换是什么 2. 进程替换函数--exec族 3. execl函数的使用 4. execv函数的使用 5. execlp函数的使用 6. execvp函数的使用 7. 验证ex ...

  8. exec函数族的使用

    调用shell脚本命令:execlp("sh","sh","filename",(char*)0); exec用被执行的程序完全替换调用它的 ...

  9. linux-进程的替换exec函数族

    文章目录 一.进程的替换 二.exec函数族 execl函数 execlp函数 execvp函数 一.进程的替换 exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exe ...

最新文章

  1. 程序计算机限制无法打开,由于一个软件限制策略的阻止,windows无法打开此程序...解决方案参考...
  2. adams建立一绳索不带滑轮_建立企业精益供应链,必须先解开现有绳索 系列(一)...
  3. 个人周报20200420
  4. python实现pdf转word详解_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...
  5. c语言基础程序设计报告,c语言程序设计基础课程设计报告.doc
  6. python文本编辑器下载_海龟编辑器(Python编辑器)
  7. .NET数据访问是否采用ORM(自译)
  8. 【已解决】离散数学项目工序表转换为网络图(完整步骤版)
  9. 在线点餐外卖系统 毕业设计毕业论文参考(1)功能
  10. mysql的max_allowed_packet配置
  11. c语言大学生自学网教学视频,6个质量最高的自学网站,悄悄的提成能力!
  12. 脱离鼠标后必须记住地快捷命令方式
  13. 高职对计算机课程要求,高职计算机应用专业课程设置浅析
  14. 谷歌刚刚发布了2500万个免费数据集,快来了解一下
  15. Mysql系列003:sql必知必会(面试必备)
  16. python中save 函数_超全Python图像处理讲解!花五天才整理的!
  17. 办公:Excel 非规律合并单元格自动填充序列
  18. linux shell 笔记
  19. xss漏洞-DVWA跨站攻击盗取用户cookie值
  20. Python计算身份证第18位(校验码)来判断身份证是否输入正确

热门文章

  1. drippingblues-靶机渗透
  2. 读曾仕强《管理的方与圆》笔记一
  3. 人工智能及其应用——第一章学习笔记
  4. java-php-python-ssm校园易购二手交易平台计算机毕业设计
  5. 好东西大家分享: 怎么画数据流图 1
  6. 设计 一个高性能爬虫系统
  7. nginx启动、停止、重启命令
  8. Prompt Engineering 入门(二)
  9. 生物统计学(biostatistics)学习笔记(二)
  10. 学术英语(理工)第二版unit5课文翻译