这节主要介绍,父子进程共享文件、fork基于的copy on write、exit(0)与_exit(0)的区别、atexit()终止处理程序。首先父子进程共享文件:直接献上一个例子:#include #include #include #include #include #include #inc...
分类:
系统相关 时间:
2015-03-28 01:08:36
阅读次数:
161
管道概念 管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”, 管道的本质是固定大小的内核缓冲区; 如:ps aux | grep httpd | awk '{print $2}' 管道限制 1)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 2)匿名管道只能用于具有共同祖先的进程(如父进程与fork...
分类:
系统相关 时间:
2015-02-18 17:41:21
阅读次数:
365
1 父子进程的程序空间 子进程获得父进程的数据空间、堆、栈的副本,即不共享这些空间 父子进程共享正文段 不过现在又很多实现采用COW写时复制技术,即共享空间,发生修改时只为修改区域制作副本2 文件共享 父子进程各自维护进程表项(记录有文件描述符、文件描述符标志、文件表指针) 父子进程共享文件表(记录...
分类:
系统相关 时间:
2014-12-04 17:45:30
阅读次数:
215
自父进程继承:进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))环境(environment)堆栈内存打开文件的描述符(注意对应的文件的位置也是和文件一起由父子进程共享的)执行时关闭(close-on-exec) 标志 (译者注:c...
分类:
系统相关 时间:
2014-10-28 15:18:52
阅读次数:
357
1.子进程是父进程的副本,获得父进程的数据空间/堆/栈,父子进程共享代码段.子进程从fork后开始执行,返回值=0表示子进程,因为子进程可以通过函数来获取父进程的ID,但是父进程无法知道子进程的ID.
2.为了提交效率,fork后,并不立刻复制父进程的空间,而是采取写时复制(COW)的技术,也就是父进程或者子进程要修改数据段/堆/栈的时候,才进行复制操作,并且复制修改的区域.
3.子进程从父进...
分类:
其他好文 时间:
2014-10-03 20:13:55
阅读次数:
151
使用fork()系统调用产生的子进程对父进程中数据的修改不会影响到父进程,因为fork()采用的是写时复制机制,就是在fork产生的子进程没有修改父进程的值时,父子进程共享同一块内存,包括栈区。当子进程修改父进程的数据时,系统会给子进程单分出一块和父进程相同的内存区并将新的修改的值写入。所以父子进程...
分类:
系统相关 时间:
2014-08-01 22:56:22
阅读次数:
319
很多源代码在父子进程进行通信时,都会yong...
分类:
其他好文 时间:
2014-06-30 10:04:01
阅读次数:
189