文章目录

  • system函数与exec函数
    • system函数
    • exec系列函数

system函数与exec函数

启动另一个新的进程

system函数

  >> system函数的原型:

#include <stdlib.h>int system(const char *string);

  >> system函数的作用:
  运行一条命令并等待该命令的完成,该命令以字符串参数 ( const char *string ) 的形式传递给system函数。
  这里需要注意的是等待命令的完成,指的是原程序调用system函数执行命令时是不会继续往下执行的,取而代之的是停在原地等待命令返回给它一个值(即命令程序的退出码)。

  >> 函数的返回值:
  若无法启动shell来运行该命令,则system将返回错误代码127;若出现其它错误则返回-1;正常调用返回该命令的退出码。
  >> 示例:

//FILENAME: sysdemo.c
#include <stdlib.h>
#include <stdio.h>int main(int argc, char **argv)
{printf("Running 'top' and waiting for it to return.\n");system("top");printf("Done.\n");return 0;
}

* 注:top命令按 ‘q’ 可退出, top退出后原进程将继续执行剩余指令。

exec系列函数

  exec系列的函数同样可以启动一个新的进程,但它与system并不同:

  • system需要先启动一个shell才能运行指定的命令
  • 调用system函数执行指定命令时,原进程会暂停等待,之后再继续运行
  • 调用exec函数开启新进程后,原进程将被直接关闭

  >> exec系列函数的原型如下:

#include <unistd.h>char **environ;int execl(const char *path, const char *arg0, ..., (char *)0);
int execlp(const char *file, const char *arg0, ..., (char *)0);
int execle(const char *path, const char *arg0, ..., (char *)0, char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);

总结一下几个函数的区别:

  • 以p结尾的两个函数通过搜索环境变量$PATH来查找要启动的程序的路径,如果$PATH中没有,则必须以绝对路径作为const char *path参数。
  • 前三个函数的参数个数是可变的,其中可变的部分作为新程序的参数(和传递给main函数的argv参数是一个意思)。可变部分后面必须跟一个空指针。
  • execle函数和execve函数可以接收一个名为envp的参数,通过它可以传递字符数组作为新程序的环境变量。
  • 全局变量environ可以用来将一个值传递给新的程序环境中。

system函数与exec函数相关推荐

  1. Linux---fork函数和exec函数

    这里主要介绍Unix/Linux中进程创建,fork()函数和exec()函数. 这里先介绍一下什么是进程: 进程是正在执行的程序的一个实例.每个实例都有自己的地址空间和执行状态.当操作系统给内核数据 ...

  2. system函数 与 exec函数的区别

    exec家族一共有六个函数,分别是:(1)int execl(const char *path, const char *arg, ......);(2)int execle(const char * ...

  3. python exec函数_Python3 exec 函数

    Python3 exec 函数 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 语法 以下是 exec 的语法: ex ...

  4. python中exec函数_python exec函数怎么用?

    我们在写编程的过程中,会发现,代码会越来越复杂.为了能出现自己想要的内容,程序越写越长,越写越复杂,也越来越难让自己看懂.其实呀,这是不可避免的.但是在python中,有帮助我们执行复杂的python ...

  5. Linux 高并发学习笔记 - exec 函数簇重载进程

    2.2.4 exec 函数簇重载进程 Linux 高并发学习笔记 - 笔记索引 execl.execlp.execle.execv.execvp.execvpe exec函数簇将重载进程,直接覆盖当前 ...

  6. Python的exec函数

    exec函数介绍 exec函数是Python中的自带函数,与eval相比,有着更大的优越性.例如eval函数只能执行计算数学表达式的结果,exec能执行一句或一段Python代码. exec函数功能 ...

  7. exec族函数、system函数、popen函数、PATH

    exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序(在exec都后面的代码不会被得到执行 ...

  8. 8.10 exec函数

    8.10 exec函数 用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其m a i n函数开始执行.因 ...

  9. linux exec 二程序,二十五、Linux 进程与信号---exec函数

    25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...

最新文章

  1. 点云及三维图像处理综述
  2. 红米ac2100有ipv6吗_#年末#白里透红,跑得相当快,红米AC2100体验
  3. Windows Mobile下使用CppUnitLite输出测试结果
  4. 使用CoreRT将.NET Core发布为Native应用程序
  5. HTML5网络科技企业网页模板
  6. post请求html405,nginx静态文件响应post请求,405 Not Allowed
  7. shell脚本文件中ll提示找不到命令
  8. js jquery select 操作 获取值,选中选项,增加,修改,删除
  9. 项目验收文档模板(三)
  10. isv支付宝小程序三方模板开发快速指南
  11. 问题1:编译内核出现错误‘debian/stamp/build/kernel‘及解决方案
  12. vue设置页面取消滚动和可以滚动
  13. Python小例子 | 如何将多张图片合成mp4视频格式,并加入背景音乐...
  14. 精美摘抄,献给每一位喜欢文学的人
  15. yyyy-MM-dd HH:mm:ss时间格式化,有的大写有的小写,大小写的含义说明
  16. WPS新建文字分享微信.docx形式_高效神器:花 5 分钟输入文字,就能自动变成 PPT...
  17. rono在oracle的作用_细节见真章,OPPO Reno多项品质测试,这才是最真实表现
  18. html5 css3舞台灯光,HTML5特效库 CSS3 实现灯光照射显示文字动画源码
  19. Java核心技术----枚举类型与泛型
  20. ThinkPHP3.2 框架sql注入漏洞分析(2018-08-23)

热门文章

  1. 中国金融业已成为外资超级提款机
  2. 企业为什么要开通银企直联_企业账务的福音,竟然只有1%的人知道!|1分钟带你了解银企直联...
  3. filewriter追加_JAVA中使用FileWriter追加文见内容
  4. luogu P3674 小清新人渣的本愿
  5. swig linux
  6. 程序员相爱相杀鄙视指南
  7. 每个 Flutter 开发者都应该知道的框架总览
  8. 测试BXERP生产服务器的各项可用性(梗概)
  9. RecyclerView中notifyDataSetChanged刷新总结
  10. Android常用命令行指令