Linux学习之“vfork函数”】的更多相关文章

为什么使用vfork()? 希望父子进程执行不同的代码.例如: 网络服务程序中,父进程等待客户端的服务请求,当请求达到时,父进程调用fork,使子进程处理该次请求,而父进程继续等待下一个服务请求到达. vfork与fork的函数原型相同,用于创建新进程,而该新进程的目的是exec一个新程序(执行一个可执行的文件). 由于新程序将有自己的地址空间,因此vfork函数并不将父进程的地址空间完全复制到子进程中. 注意以下两点: 1.子进程在调用exec或exit之前,在父进程的地址空间中运行. 2.v…
n返回值: fork函数调用一次,但是返回两次:在子进程中返回0,在父进程中返回子进程ID,出错返回-1.通过返回值,可以确定是在父进程还是子进程中. n子进程和父进程继续执行fork调用之后的指令. 子进程是父进程的副本: 1.子进程获得父进程数据空间.堆和栈的副本:父子进程并不共享这些存储空间. 2.父子进程共享正文段(只读的): 3.为了提高效率,fork后并不立即复制父进程空间,采用了COW(Copy-On-Write):当父子进程任意之一,要修改数据段.堆.栈时,进行复制操作,但仅复制…
先看下"_exit"和"exit": exit被调用时,将冲刷所有的标准I/O流,关闭所有打开的文件描述符.在传统实现中,同时也将关闭标准I/O流.即表示标准输出FILE对象的相关存储区将被清0.而_exit不会执行这些操作. 由于父子进程共享同一地址空间,当父进程恢复运行并调用printf时,不会产生任何输出,它返回-1.这就是上一节调用_exit的原因. 然而,大多数exit的现代实现不再关闭流.因为进程即将终止,内核将关闭所有已打开的文件描述符. Linux程…
基本语法 funname () { action; return -)):如果不加,将以最后一条命令运行结果,作为返回值. } 示例1:定义并调用无返回值的函数 #!/bin/bash a= b= c=`expr $a + $b` demofunc(){ echo "a+b=${c}" } demofunc --- output: a+b= 示例2: 定义并调用有返回值的函数 #!/bin/bash a= b= demofunc(){ c=`expr $a + $b` return $…
Linux内核的ioctl函数学习 来源:Linux公社  作者:Linux 我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl, 所以就规定了我们讨论的范围.为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑. 一. 什么是ioctl. ioctl是设备驱动程序中对设备的I/O通道进行管理的函数.所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率.马达的转速等等.它的调用个数如下: i…
明天开始学习进程,在以前的单片机开发中,都没有进程这个概念,但从网上了解到,这个东西在操作系统中似乎具有很重要的地位,一定好好学习! ------------------------------------------------------------------ 程序(program)是一个普通文件,是为了完成特定任务而准备好的指令序列与数据的集合,这些指令和数据以"可执行映像"的格式保存在磁盘中.例如:hello.c源程序文件经过编译后产生a.out程序,其中a.out文件为可执…
vfork函数的调用序列和返回值与fork相同,但两者的语义不同. vfork用于创建一个新进程,而新进程的目的是exec一个新程序.vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit),于是也就不会存访该地址空间.相反,在子进程调用exec或exit之前,它在父进程的空间中运行. vfork和fork之间的另一个区别是:vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行.(如果在调用这…
期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:int fcntl( int fd, //文件标识符    int command, //这个具体选项看学习笔记11,最后有具体介绍,这里主要用到的是F_GETLK.F_SETLK或F_SETLKW struct flock* flock_structure  //文件锁结构体 ); 上面出现的第二个参…
一.基础知识 1:进程. 1,进程ID: 非负整数,具有唯一性. 1)ID=0的进程:调度进程/交换进程.内核的一部分.不执行任何磁盘上的程序. 2)ID=1的进程:init进程. 1-自举结束时,由内核调用,且不会终止. 2-用于读取与系统有关的初始化文件.并引导系统至一个状态. 3-使用root权限运行,是所有孤儿进程的父进程. 3)ID=2的进程:页守护进程.负责支持虚拟存储器系统的分页操作. 2,僵死进程:已经终止,但其父进程尚未对其进行善后处理的进程. 3,进程调度. 1)UNIX系统…
[+]查看原图http://www.ituring.com.cn/article/119401 来北京工作已经一个多月,大都市的生活比起读大学要忙碌得多,尤其是出行,基本以小时为基本的计时单位.有时茫然看着窗外车水马龙,会有些迷茫自己选择的是对还是错. 题外话不多说,回归这次的主题,扒一扒我看过的那些Linux相关的书籍. 对于Linux的了解和接触,缘起自大一时候的Linux限选课,老师说这门课可选可不选,但是选修后考试挂了的话需要补考.当时的我还比较爱学习,于是兴冲冲地选修了这门课,用的是清…