服务器进程为何通常fork()两次】的更多相关文章

首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件.两次fork()就是为了解决这些相关的问题而出现的一种编程方法. 孤儿进程 孤儿进程是指父进程在子进程结束之前死亡(return 或exit).如下图所示: 但是孤儿进程并不会像上面画的那样持续很长时间,当系统发现孤儿进程时,init进程就收养孤儿进程,成为它的父亲,child进程exit后的资源回收就都由init进程来完成. 僵尸进程 僵尸进程是指子进程在父进程之前结束了,但是父进程没有用wait或waitpid回…
为何要fork()两次来避免产生僵尸进程?   当我们只fork()一次后,存在父进程和子进程.这时有两种方法来避免产生僵尸进程: 父进程调用waitpid()等函数来接收子进程退出状态. 父进程先结束,子进程则自动托管到Init进程(pid = 1). 目前先考虑子进程先于父进程结束的情况: 若父进程未处理子进程退出状态,在父进程退出前,子进程一直处于僵尸进程状态. 若父进程调用waitpid()(这里使用阻塞调用确保子进程先于父进程结束)来等待子进程结束,将会使父进程在调用waitpid()…
守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊的进程.它独立于控制终端并且周期性的执行某种任务负等待处理某些发生的事件.因为他们没有控制终端,所以说他们是在后台运行的. 守护进程的特点: (1)Linux系统启动时会启动很多系统服务进程,守护进程没有控制终端,不能直接和用户交互. (2)其他进程都是在用户登录或者运行程序时创建,在运行结束或用户注销时终止,但守护进程不受用户登录注销的影响,只受开机关机的影响. 守护进程存在的原因: daemon函数存在的原因是因为控制终端由于某些…
一个现有进程可以调用fork函数创建一个新进程. #include <unistd.h> pid_t fork( void ); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回- 由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID.将子进程ID返回给父进程的理由是:因为一个进程的子进程可以有多个,并且没有一个函数使一个进程可以获得其所有子进程的进程ID.f…
一.进程的创建步骤以及创建函数的介绍 1.使用fork()或者vfork()函数创建新的进程 2.条用exec函数族修改创建的进程.使用fork()创建出来的进程是当前进程的完全复制,然而我们创建进程是为了让新的进程去执行新的程序,因此,就需要用到exec函数族对创建出来的新进程进行修改,让他拥有和父进程不一样的东西,修改后就可以执行新的程序,当然,修改后的子进程包含了要执行程序的信息. 在Linux中,fork()和vfork()就是用于创建进程的两个函数,他们的相关信息如下: 创建进程函数:…
lienhua342014-10-07 在“进程控制三部曲”中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork 创建的新进程与调用进程之间的关系.父子进程的数据共享问题等.fork 是否可以无限制的调用?如果不行的话,最大限制是多少?另外,我们还将学习一个 fork 的变体 vfork. 1 fork 创建的新进程与调用进程之间的关系 UNIX 操作系统中的所有进程之间的关系呈现一个树形结构.除了进程 ID…
一.用法解析: fork()这个函数,可以说是名如其人了,众所周知fork这个单词本意为叉子,老外取学术名字的时候总会有一些象形的想法,于是就有了下图~ fork()函数是计算机程序设计中的分叉函数.也就是一个父进程会对应创建一个子进程. 那么问题来了,我们平常学的函数大多都是只有一个返回值,但fork()特别就特别在调用一次可以产生两个返回值! fork()第一次返回的是子进程的ID(在父进程中返回子进程ID)    第二次返回的是0(在子进程中返回0) 总的来说,fork()可能有三种不同的…
ID为0的进程一般是调度进程.常被称为交换进程(swapper),是内核中的系统进程. ID为1的进程叫做init进程,是一个普通用户进程,不属于内核,由内核调用. 一个现有进程能够调用fork函数创建一个新进程(子进程).fork函数被调用一次.返回两次. 子进程返回值为0.父进程返回值为子进程的进程ID. 当fork出一个子进程后,子进程便拥有独立的数据段.堆.栈的副本,但父.子进程共享正文段(关于程序分布见文章"C程序的存储空间布局").但如今非常多实现并不全然复制数据段.堆.栈…
执行一个SQL语句 执行查询语句的过程: 用户进程执行一个查询语句如select * from emp where empno=7839 用户进程和服务器进程建立连接,把改用户进程的信息存储到PGA的UGA中 语句经过PGA处理后传递给实例instance 实例instance中的共享池处理这条语句 库缓冲区去判断语句如何分析--软分析(快)或硬分析(慢) 根据cbo得到执行计划,准备去执行语句.(CBO和RBO是ORACLE提供的两种优化器) 查询语句中的对象(emp表和行)存放在那个表空间,…
3.1 Using the program shown in the Figure3.30, explain what the output will be at LINE A 答案:LINE A 处的输出是PARENT: value = 5. 解析: 此问题的相关知识有进程创建.fork函数. 当父进程调用fork函数时, 新创建的子进程几乎但不完全与父进程相同, 子进程会获得一份父进程用户级虚拟地址空间的拷贝, 但是此拷贝是独立的, 拷贝内容包括文本.数据和bss段.堆以及用户栈. 所以在图…