fork()是用于建立进程的手段之一,但是fork()只能建立相同程序的副本。幸运的是,Linux系统还提供了系统调用exec系列。它可用于新程序的运行。

如果exec调用成功,调用进程将被覆盖,然后从新程序的入口开始执行。这样就产生了一个新的进程,但是它的进程标识符与调用进程相同。这就是说,exec没有建立一个与调用进程并发的新进程,而是用新进程取代了原来的进程。所以,对exec调用成功后,没有任何数据返回,这与fork()不同。

下面给出了exec系列调用在Linux系统中unistd.h中的函数声明:

int execl(const char *path, const *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char* const envp[]);
int execv(const char *path, char* const argv[]);
int execvp(const char *file, char* const argv[]);

下面来看一个exec函数的示例:

#include <stdio.h>
#include <unistd.h>
int main()
{
printf("Executing ls\n");
execl("/bin/ls", "ls", "-la", NULL);
printf("------End of execl()\n");
// 输出了下面的语句就表明execl调用失败了
perror("execl failed to run ls");
return 0;
}

运行结果:

Executing ls
总用量 56
drwxrwxr-x  2 zcm zcm 4096 11月  2 16:26 .
drwxr-xr-x 11 zcm zcm 4096 10月 17 11:26 ..
-rwxrwxr-x  1 zcm zcm 5396  9月 21 11:17 p0
-rw-r--r--  1 zcm zcm  455  9月 21 11:16 p0.c
-rwxrwxr-x  1 zcm zcm 5195 11月  2 16:26 p1
-rw-r--r--  1 zcm zcm  259 11月  2 16:26 p1.c
-rwxrwxr-x  1 zcm zcm 5051  9月 21 10:23 p2
-rw-r--r--  1 zcm zcm  152  9月 21 10:23 p2.c
-rwxrwxr-x  1 zcm zcm 5489 10月 17 09:26 travel
-rw-rw-r--  1 zcm zcm 1405 10月 17 09:26 travel.c
[zcm@c #64]$

注意到了吗:没有“printf("------End of execl()\n"); “的输出噢。这正好说明了:exec没有建立一个与调用进程并发的新进程,而是用新进程取代了原来的进程。

linux下exec系列(一)相关推荐

  1. linux下-exec和xargs的区别

    原文地址:http://blog.csdn.net/arganzheng/article/details/6260720 -exec和xargs的区别 2010-11-27 星期六 晴朗 当你在命令行 ...

  2. 【Linux】exec()系列函数——execl(),execlp(),execle()等的区别

    l和v二选一,为必备项 l表示参数可变长,以一个空指针结尾 v表示参数直接用一个指针的数组列出,最后一个指针同样需要为空指针 p可选 有p表示函数的第一个参数可以单用可执行文件名,这样系统会在环境变量 ...

  3. Linux下进程的建立 并附Linux exec函数族

    我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看 ...

  4. linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国

    原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...

  5. 【转载】linux进程控制-exec系列 exec系统调用

    inux进程控制-exec系列 说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是: #include <unistd.h ...

  6. Linux下sql_labs第七关,SQL注入之Sqli-labs系列第二十七关(过滤空格、注释符、union select)和第二十七A...

    开始挑战第二十七关(Trick with SELECT & UNION) 第二十七A关(Trick with SELECT & UNION) 0x1看看源代码 (1)与26关一样,这次 ...

  7. linux arcgis10.4安装教程,ArcGIS 10.1 for Server安装教程系列—— Linux下的单机安装

    因为Linux具有稳定,功能强大等特性,因此常常被用来做为企业内部的服务器,我们的很多用户也是将ArcGIS Server安装在Linux上,但是对于初次接触Linux的用户,他们都觉得无从下手,Li ...

  8. Linux下的文件共享全攻略系列之一:Samba服务器简介与快速配置指南

    目前,研究者们开发了许多网络服务和协议来完成资源共享的功能.对于网络用户和管理员来说,他们希望得到免费和高效的服务,而这种需求的最好选择莫过于当前开源的操作系统Linux下的产品了.本专题从多个应用服 ...

  9. Linux 下shell中exec解析

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息.        bash shel ...

最新文章

  1. 爬虫之数据提取jsonpath模块的使用场景和使用方法
  2. 测试过程之过分关注功能性测试
  3. Web页面布局方式小结
  4. RequestWindowFeature
  5. 数据中心安全的六条黄金规则
  6. JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式
  7. RSA公钥体系 与在 ssh中免密的登陆的应用
  8. Modbus协议栈开发笔记之三:Modbus TCP Server开发
  9. node.js 中间件_Node.js中的Passport中间件(模块)
  10. c# —— 枚举和值的隐藏副作用
  11. Docker学习总结(48)——Docker 四种网络模式温故
  12. CNN手把手维修攻略:你的网络不好好训练,需要全面体检
  13. C#中的值类型(value type)与引用类型(reference type)的区别
  14. System.Web.AspNetHostingPermission 类型的权限已失败
  15. hibernate理解
  16. 我在CSDN参与的3000个帖子
  17. 解决CesiumForUnreal加入CesiumSunSky并调整设置后场景仍然纯白的问题
  18. appinventor计算机教程,App Inventor编程开发集锦2-计算器-第2课-实现常规操作
  19. pdf太大怎么压缩大小?
  20. 在阿里云容器服务上基于Istio实现出口Egress流量管理

热门文章

  1. Ubuntu安装BackExec Remote Agent for Linux
  2. 实验二十四、OSPF 在NBMA 环境中点到点的配置
  3. 在SQL Server2005中进行错误捕捉
  4. 大数定理 中心极限定理_中心极限定理:直观的遍历
  5. 图像离群值_什么是离群值?
  6. 639. 解码方法 II
  7. 交互式图表_如何构建罗马数字转换器和交互式罗马数字图表
  8. 移动应用程序和网页应用程序_如何开发感觉像本机移动应用程序的渐进式Web应用程序...
  9. 使用Python发送电子邮件
  10. 在JavaScript中反转字符串的三种方法