一. 共享内存介绍系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面。系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射shm文件系统中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应shm文件系统的一个文件.二、系统V共享内存API对于系统V共享内存,主要有以下几个API:shmget()、shmat()、shmdt()及shmctl()。#include <sys/ipc.h>#includ Read More
posted @ 2012-10-19 18:16 星语海蓝 Views(846) Comments(0) Diggs(0) Edit
daemon进程步骤1. 调用fork产生一个子进程,同时父进程退出,所有后续工作都在子进程中完成。如果我们是从命令行执行的该程序,这可以造成程序执行完毕的假象,shell会回去等待下一条命令;刚刚通过fork产生的新进程一定不会是一个进程组的组长,这为第2步的执行提供了前提保障。由于父进程已经先于子进程退出,会造成子进程没有父进程,变成一个孤儿进程(orphan)。每当系统发现一个孤儿进程,就会自动由1号进程收养它,这样,原先的子进程就会变成1号进程的子进程。2. 调用setsid系统调用。这是整个过程中最重要的一步。它的作用是创建一个新的会话(session),并自任该会话的组长(sess Read More
posted @ 2012-10-19 11:13 星语海蓝 Views(296) Comments(0) Diggs(0) Edit
创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include sys/types.h>#include unistd.h>pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分配内存。fork函数返回后,子进程和父进程都是从fork函数的下一条语句开始执行。由于子进程与父进程的运行是无关的,父进程可 Read More
posted @ 2012-10-19 10:09 星语海蓝 Views(300) Comments(0) Diggs(0) Edit