手机版
你好,游客 登录 注册
背景:
阅读新闻

Linux进程编程:子进程创建及执行函数简介

[日期:2015-01-25] 来源:Linux社区  作者:Linux [字体: ]

Linux进程编程:子进程创建及执行函数简介

子进程创建及执行函数有三个:

(1)fork();

(2)exec();

(3)system();

下面分别做详细介绍。

(1)fork()

函数定义:

pid_t fork();

函数说明:

linux下进程在内存中由三部分数据组成:代码段、数据段、堆栈段。在一个进程中,调用fork函数,可以创建、启动一个新进程。新进程与父进程共享代码段,复制父进程的数据段和堆栈段。创建成功后,fork()会向两个进程都有返回值。向父进程的返回值为子进程的进行号,向子进程的返回值为0。由于两个进程共享代码段,我们就利用两个返回值的不同,通过if...else...区分两进程在子进程启动后的运行情况。

返回值:

创建成功后,fork()会向两个进程都有返回值。向父进程的返回值为子进程的进行号,向子进程的返回值为0。函数调用失败返回值为-1。错误原因存在于errno中。

(2)exec()函数族

exec函数族共6个函数,函数原型:

int execl(const char *path, const char *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 arg[]);

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

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

函数族说明:

exec()函数族通过指定路径或文件名的方式找到并执行一个可执行文件。该可执行文件可以使二进制文件或linux系统下可执行的shell脚本文件,一旦执行即替代原进程代码,废除原进程数据段和堆栈段,但仍然沿用原进程的进程号。换句话说,原进程运行的程序已经换成了新的程序,但对系统而言还是同一个进程。如果我们的程序向启动另一个程序的执行,还想原进程继续运行,可以将fork和exec结合使用,先创建新进程,然后再新进程中使用exec调用需要启动的程序。

函数返回值:

exec()函数族的函数执行成功后没有返回值,调用失败时才会返回-1,原程序由调用点继续往下执行。

(3)system()

函数定义:

int system(const char *file);

函数说明:

system()相当于fork与execl的组合。首先由fork()函数建立了一个子进程,然后由execl()函数根据参数file给定的文件名找到并执行可执行文件。

system()与exec函数族都可执行进程外的命令,区别是system()函数在原程序上创建一个新的进程,再在新进程中执行可执行文件;而exec函数族是在新开辟的进程中植入新代码替代原程序代码。

函数返回值:

函数调用成功返回0;调用失败返回-1。若返回值的8~15位为127,则system()中的execl函数执行失败。

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-01/112344.htm

linux
相关资讯       Linux进程  Linux创建子进程 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款