fork/exec/system 用法简介
2012-06-07 22:31
447 查看
pid_t fork(void);
1、从父进程复制出子进程,进程控制块内容相同,用户态代码和数据也相同;
2、父进程返回子进程ID(父进程唯一能得到子进程ID的时刻),子进程返回0;
3、返回后父进程与子进程的运行顺序不确定,由调度程序确定;
4、父进程打开的描述符都被复制到子进程中,子进程不集成父进程的锁。
pid_t vfork(void);
与fork基本相同,有两处显著差异:
1、子进程没有复制出一套自己的数据空间与堆栈信息,子进程中的改变也会影响父进程;
2、vfork后先运行子进程,父进程此时阻塞;当子进程执行exit或exec函数后父进程才能继续执行;
exec
exec是一系列函数,分为execl/execlp/execle/execv/execvp/execve六种
1、实质上前五种都是对execve的某种形式的封装,只有execve是系统调用
2、exec并不创建新的进程,只是用另一个程序替换了当前进程的正文、数据、堆栈段;因此进程ID不会改变。
3、调用exec成功则加载新的程序从起始代码开始执行,不会返回到原程序中;当调用出错时才有返回值,为-1;
system
集成了fork、exec、wait的功能并添加了响应的错误处理,缺点是不能控制fork出子进程的运行权限;
1、从父进程复制出子进程,进程控制块内容相同,用户态代码和数据也相同;
2、父进程返回子进程ID(父进程唯一能得到子进程ID的时刻),子进程返回0;
3、返回后父进程与子进程的运行顺序不确定,由调度程序确定;
4、父进程打开的描述符都被复制到子进程中,子进程不集成父进程的锁。
pid_t vfork(void);
与fork基本相同,有两处显著差异:
1、子进程没有复制出一套自己的数据空间与堆栈信息,子进程中的改变也会影响父进程;
2、vfork后先运行子进程,父进程此时阻塞;当子进程执行exit或exec函数后父进程才能继续执行;
exec
exec是一系列函数,分为execl/execlp/execle/execv/execvp/execve六种
1、实质上前五种都是对execve的某种形式的封装,只有execve是系统调用
2、exec并不创建新的进程,只是用另一个程序替换了当前进程的正文、数据、堆栈段;因此进程ID不会改变。
3、调用exec成功则加载新的程序从起始代码开始执行,不会返回到原程序中;当调用出错时才有返回值,为-1;
system
集成了fork、exec、wait的功能并添加了响应的错误处理,缺点是不能控制fork出子进程的运行权限;
相关文章推荐
- 嵌入式 fork/exec/system 用法简介
- linux c语言 fork() 和 exec 函数的简介和用法
- linux c语言 fork() 和 exec 函数的简介和用法
- PHP exec 函数及 system,exec,passthru 区别用法详解
- system()、exec()、fork()三个与进程有关的函数的比较
- PHP中exec与system用法区别分析
- PHP中exec与system用法区别分析
- 进程创建system、exec、fork
- fork与vfork、exec与system
- 多进程函数系列fork(), wait(), exec()系列,system(), posix_spawn()实例详解
- 有关 vfork + exec 与 system 的效率对比
- fork, exec and system
- fork + exec, system, popen
- 进程控制:system, exec* and fork
- php调用外部命令函数system,exec,passthru的区别和用法详解
- system.timers.timer用法简介
- php中exec,system及passthru函数用法介绍
- 进程产生的三种方式:fork、system和exec
- PHP中exec与system用法区别分析
- exec()函数族用法简介