`
javayestome
  • 浏览: 1010811 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

fork vfork exit _exit

阅读更多

fork: 子进程拥有父进程的数据段、堆和栈的副本,父进程和子进程共享正文段。但现在很多实现却并不是将父进程的数据段、堆栈段进行完全拷贝,而是采用写时复制(copy-on-write),内核将其标记为只读,(典型的页式虚存)只有父进程或子进程对这些区域进行修改时内核才真正将那一页进行拷贝,从物理上分离开。
vfork:由于在vfork后经常是跟着一个exec执行一个新的程序不会在用到原来的地址空间,所以vfork的子进程在调用exec或exit之前是在父进程的空间里运行的,这样对于页式虚存效率很高。另外,vfork的子进程总是先与父进程执行,但是子进程不能依赖与父进程的执行否则产生死锁。

exit(0):根据实现的不同而不同,一般是刷新I/O缓冲区,关闭所有I/O标准流 (APUE上如是说,但是我在linux下验证的结果应该是没有关闭),一般现在的I/O库函数在关闭I/O流方面不自找麻烦了。

_exit(0):不刷新I/O缓冲区


标准I/O库:
标准I/O库是带缓存的,如果标准输出是连接到终端设备,则它是行缓冲的,否则是全缓冲的。行缓冲在接收到一个换行符才进行刷新,而全缓冲在缓冲区满或者程序在执行exit退出后在执行缓冲区刷新


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunnyclub/archive/2009/09/17/4563205.aspx

分享到:
评论

相关推荐

    创建新进程:fork函数:fork函数干什么? fork函数与vfork函数的区别在哪里?为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?

    创建新进程:fork函数:fork函数干什么? fork函数与vfork函数的区别在哪里?为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?

    【Linux】进程二 (PCB & fork/vfork & wait/waitpid & exit/_exit & exec函数族 & 环境变量)

    一、描述进程——PCB ·进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合 ·我们称为PCB,Linux操作系统下的PCB是:task struct 2、task_struct——PCB的一种 ·在Linux中描述进程的结构体...

    sfork:用于在Linux上启动进程的同步单线程接口

    概括 sfork是Linux上新系统调用的原型,它为启动进程提供了同步的单线程接口。 sfork可以看作是vfork一种变体,它做了... 但是,与传统的fork和vfork , sfork只会返回一次。 sfork成功时总是返回0,如果由于任何通常

    UNIX编程常见问题解答

    1.1.3 Why use _exit rather than exit in the child branch of a fork? 1.2 Environment variables 1.2.1 How can I get/set an environment variable from a program? 1.2.2 How can I read the whole ...

    unix 编程进程控制详细介绍

    fork函数 fork创建子进程,子进程是父进程的副本,会得到父进程数据空间、堆、栈的副本。 然后文件的共享这块也比较复杂,父进程和子进程各自都有文件描述符表,但是文件表示公用的(而一般两个进程,文件表是每个...

    Unix编程常见问题解答 高清PDF含书签目录

    1.1.3 Why use _exit rather than exit in the child branch of a fork? 为何在一个fork的子进程分支中使用_exit函数而不使用 exit函数? 1.2 Environment variables 环境变量 1.2.1 How can I get/set an ...

    UNIX环境高级编程(第八章)

    8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 ...

    LINUX内核源代码情景分析

    4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的互斥操作

    UNIX环境高级编程部分

    8.4 vfork 函数 8.5 exit函数 8.6 wait和waitpid函数 8.7 wait3和 wait4函数 8.8 竞态条件 8.9 exec函数 8.10 更改用户ID 和组ID 8.10.1 setreuid 和setregid函数 8.10.2 seteuid和 setegid函数 8.10.3 组ID 8.11 ...

    UNIX环境高级编程

    8.4 vfork 函数 8.5 exit函数 8.6 wait和waitpid函数 8.7 wait3和 wait4函数 8.8 竞态条件 8.9 exec函数 8.10 更改用户ID 和组ID 8.10.1 setreuid 和setregid函数 8.10.2 seteuid和 setegid函数 8.10.3 组ID 8.11 ...

    LINUX内核源代码情景分析(上).part1.rar

    4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的互斥操作 第5章 文件...

    UNIX环境高级编程_第二版中文

    8.4 vfork函数  8.5 exit函数  8.6 wait和waitpid函数  8.7 waitid函数  8.8 wait3和wait4函数  8.9 竞争条件  8.10 exec函数  8.11 更改用户ID和组ID  8.12 解释器文件  8.13 system函数  8.14...

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的互斥操作 第5章 ...

    IT行业中必备技能之UNIX最佳学习资料

    8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 ...

    Unix高级编程 pdf

    8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 ...

    UNIX环境高级编程和源代码

    8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 ...

    UNIX环境高级编程(中文版+英文版+源代码)

    8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 ...

    UNIX环境高级编程.pdf

    8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 ...

Global site tag (gtag.js) - Google Analytics