fork系统调用 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3)如果出现错误,fork返回一个负值; fork出错可能有两种原因: 1)当前的进程数已经达到了系统 ...
分类:
其他好文 时间:
2016-04-22 16:00:36
阅读次数:
129
进程是系统进行资源分配和调度的基本单位,包括代码、数据等资源。 fork函数通过系统调用创建一个与原进程相同的子进程。 在调用进程(父进程)中返回一次,返回子进程ID;在子进程返回0。 父进程调用fork之前打开的所有描述符在fork返回之后由子进程分享。 网络服务器父进程调用accept之后调用f ...
分类:
其他好文 时间:
2016-04-20 13:39:22
阅读次数:
137
管道由pipe函数创建#include<unistd.h>intpipe(intfiledes[2]);调用pipe函数在内核中开辟一块缓冲区(就是管道)用于通信,filedes[0]指向管道的读端,filedes[1]指向管道的写端。pipe函数调用成功返回0,调用失败返回-1。比如,父进程关闭读端,子进程关闭写端。代码如..
分类:
系统相关 时间:
2016-04-17 23:29:52
阅读次数:
513
僵尸进程:在子进程未退出的情况下,父进程退出,子进程被init进程接管,但是子进程将不会正常退出,退出后也不会被收回该进程的资源,所以这种情况应该被避免,否则数量多了以后系统资源将被消耗完.为了避免这种情况可以是用vfork函数进行子进程的派生,或者在父进程中使用一下函数来等待子进程的退出: 头文件 ...
分类:
系统相关 时间:
2016-04-17 13:10:18
阅读次数:
166
通过Linux启动过程可以得知,所有进程都是init进程直接或者间接的fork出来的. 首先咱们来看看怎么创建子进程: 头文件 #include <unistd.h> int fork(void); //创建一个子进程(开辟和父进程相同空间)返回值:-1失败,成功返回创建的子进程的Id int vf ...
分类:
系统相关 时间:
2016-04-17 11:28:17
阅读次数:
228
线性内存和物理内存进程是一个逻辑概念保存现场内存分段用户空间内核空间:进程的描述信息,户口本内存分页TLBMMU:MemoryManagementUnit进程进程号用户内存空间父进程CPUtimeVSZ:virtualsize虚拟内存RSS:residentsize常驻内存(不能被交换出去的数据和变量)多进程模型:单..
分类:
系统相关 时间:
2016-04-15 23:08:16
阅读次数:
301
1、管道(pipe)特点a>.通过pipe建立通信管道,fork创建子进程(传递文件描述符),且这种关系只能由父进程建立,局限于有血缘关系的进程间的通讯;b>.管道是文件,并且只存于内存中,当进程终结时,管道也消失;c>.管道只能是单向通信,一端输入,另一端输出;d>...
分类:
其他好文 时间:
2016-04-13 00:42:42
阅读次数:
170
使用管道需要注意的四种特殊情况第一种情况:如果所有指向管道写端的文件描述符都关闭后,还有进程在读的话,当管道所有内容读完后,再次read会返回0.运行结果:结果分析:我们在子进程里面写了10次,写完后关闭写,然后父进程读,读了10次之后当读第11次时候,read返回了0,证..
分类:
其他好文 时间:
2016-04-13 00:35:01
阅读次数:
163
一、什么是守护进程 守护进程,也就是通常说的Daemon(精灵)进程,是Linux中的一种服务进程。它的特点是: 1.1后台运行 守护进程需要独立于任何一个控制终端。实现方法调用是通过创建子进程来充当守护进程,而父进程退出,这样子进程就可以在后台运行。(范例展示) pid=fork(); if(pi ...
分类:
系统相关 时间:
2016-04-12 00:10:26
阅读次数:
229
一、wait()函数 当一个进程中调用wait()函数的时候 (1)假设其全部的子程序都还在执行,则堵塞 (2)假设一个子进程已终止。则等待父进程获取其终止状态。 (3)假设没有子进程,则返回错误。 以下的实例中。在父进程中调用wait(),假设子进程还没有执行完成,则将自己调入堵塞状态。 等待子进 ...
分类:
系统相关 时间:
2016-04-11 13:54:03
阅读次数:
266