我见过许多描述进程周期的说法,觉得以下描述颇具意思,希望分享。
|(fork)-----------------------|(exec)-------|(return,exit,..)-------|(完全消失)
不存在的生命->生命的开始,但只是克隆体->生命的升华->生命的结束,只剩尸体->完全消失
图1
进程也是有生命的,它有它的一辈子。最开始它完全不存在,某个时刻某个进程内执行了一次fork(),于是一个新生命就诞生了,他有自己的ID号(pid),它知道自己的父亲是谁(ppid),但是它只是父亲的一个克隆体,从父亲那儿继承了父亲的大部分财产,但是它只是一个父亲的克隆,没有太多生命的意义。直到某天自身的一次exec(),给它带来了新的生命力,生命得到升华,进入了生命的黄金阶段。后来生命结束了,也许是自然死亡(程序运行结束),也许是被意外死亡(exit,return),什么财产也没有了,只剩下一句尸体(zombie),以及一些其他进程看不懂的遗书,而这个遗书只有前来验尸的wait或waitpid才能看懂。父亲进程会去询问wait或waitpid孩子死前留下的遗言,也许不去理会。当验尸完后,进程也就从这个世界上的消失了。
一般来说,死去的进程都会让wait或waitpid来验尸,然后才让它消失。但是那么一些进程很苦,生下来就被这个世界忽略忽视,生下来之前就被signal(SIGCHLD,SIGIGN)处理过了,它们死后马上消失,不会留尸体和任何的遗言。
传统的进程是幸福的,父亲那有什么东西,它就去索取相同的一份,所有东西都完全的克隆拷贝成另外一份。但后来系统觉得这样不公平,不允许这种资源的浪费。孩子完全可以共享父亲的资源啊,没必要自己也要去弄一份,除非孩子实在不喜欢父亲的某样东西了,想要去改变它时,系统才会给它相应的资源。所以这就是系统在产生子孩子时候惯用的一招写时拷贝策略(copy-on-write)。
有人会问,wait和waitpid是何许人也,只有他们有资格看死进程的遗书?因为它们是公务员(系统调用)啊,在sys/wait.h sys/types.h部门工作,人家有该权利。如果它们不负责,只是走过场,就会在开始的时候带WNOHANG的牌子,表明看一眼就走,这时候即使进程还没死,当叫到它们的时候,它们就简单的看一眼就走了。除非不要给它们带WNOHANG这个标记,那么它们就规规矩矩的一直等着进程死,并验尸完后,才能走。当然久等之下的它们肯定会有些抱怨,不如说这个死进程和你没任何关系啊之类的,关于这两个公务员的细节可以查看文档。
分享到:
相关推荐
进程管理 1.实验内容 至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。 2.实验提示 PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,...
1、 用PCB表示整个进程实体,利用随机数方法或键盘控制方法模拟进程执行中产生的事件,或者利用基于图形界面的鼠标或者键盘操作控制进程管理内容。 2、 定义PCB(可以采用静态结构或动态结构):包括理论PCB中的基本...
"易语言暂停进程源码.zip" 文件包含的正是关于如何利用API暂停和恢复进程的源码,这对于系统管理和软件开发有着实际的应用价值。易语言是一种中国本土开发的编程语言,其语法简洁,易于学习,适合初学者和专业开发者...
本文将深入探讨"进程监控--启动进程 关闭多余的进程"这一主题,以及如何通过程序实现这样的功能。 首先,我们要理解什么是进程。在操作系统中,进程是程序在内存中的一次执行实例,拥有自己的内存空间和状态。当多...
例如,`FindProcessByName`这个文件很可能就是一个实现这一功能的代码示例,它可能包含了创建进程快照、枚举进程并查找指定名称进程的逻辑。 在实际应用中,这种技术常用于系统监控工具、性能分析软件或者安全软件...
1.父进程向子进程传入参数可以由CreateProcess()函数来完成,注意子进程是通过GetCommandLine()来获取这个参数而且不是char *argv[]。 2.父进程要获取子进程的返回值可以在等待子进程结束后通过...
这个函数允许开发者强制结束指定进程,其参数包括要终止的进程的句柄和退出代码。需要注意的是,`TerminateProcess`是一种强制关闭方法,可能导致数据丢失,因此在使用时需谨慎。 在VC++中,获取和使用进程ID是常见...
7. **调试技术**:这类技术常用于调试目的,通过挂起或冻结目标进程,开发者可以观察其他进程的运行情况,或者在特定点分析进程状态。 8. **代码实现**:在VC++中实现挂起或冻结进程,通常涉及到Windows API的调用...
### VC 查找进程与关闭进程方法详解 #### 一、引言 在Windows平台下,进行进程管理和控制是一项常见的需求,特别是在开发系统级工具或应用时。本文将深入探讨一个具体的示例代码片段,该片段提供了查找指定进程并...
1、进程调度算法:采用动态最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。 2、每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息: 进程名---进程标示数 ID 优先数 PRIORITY ...
如果子进程已经终止,那么,它的终止代号将告诉父进程这个任务是否已成功地完成。 为了遵循这些设计原则,不允许 Linux 内核在进程一终止后就丢弃包含在进程描述符字段中的数据。只有父进程发出了与被终止的进程...
在这个场景中,"根据进程的PID杀进程"是一种常见的操作方法。 PID(Process ID,进程ID)是操作系统分配给每个进程的唯一标识符,它是一个整数值,用于区分系统中的不同进程。通过PID,我们可以精确地定位到我们要...
在这个时间片内,进程会持续运行。 2. 如果进程在一个时间片内的运行时间达到了所需的总运行时间,那么将该进程的状态改为完成(F),并从系统中移除。 3. 如果进程在一个时间片内的运行时间未达到所需的总运行时间...
在VB中,你需要进程ID(从EnumProcesses获取)来打开进程,这样你就可以对它进行读取、写入、或者像在这个例子中那样,终止进程。这个函数返回一个进程句柄,它是后续操作的基础。 3. **TerminateProcess**:这是...
标题中的“pb实现进程管理-实现进程列表并可指定Kill进程”指的是使用PowerBuilder(简称PB)这个编程工具来开发一个应用程序,该程序能够管理和控制操作系统中的进程。PowerBuilder是Sybase公司推出的一种面向对象...
这个新进程几乎与父进程完全相同,但是它具有不同的进程ID (PID)。 - **fork()函数的工作原理**: 当`fork()`被调用时,它会在当前进程中创建一个副本,这个副本称为子进程。父进程和子进程都会继续执行接下来的指令...
在这个例子中,父进程(PPID)创建了一个子进程(PID),它们共同存在于进程树中。`ps -ef`命令的输出展示了系统中所有进程的详细信息,包括它们的PID、父进程ID(PPID)、CPU占用率、启动时间等。 6. **进程通信**...
1. **进程标识符(PID)**:每个进程都有一个唯一的PID,通过`GetCurrentProcessId` API函数可以获得当前进程的PID,这在识别和管理进程时非常有用。 2. **Windows API调用**:VB中可以直接调用Windows API函数来...
总结来说,"进程模拟&进程队列&操作系统"这一主题涵盖了操作系统如何管理进程,以及如何通过模拟和队列管理来理解进程状态的动态变化。这对于深入理解操作系统原理、开发系统工具以及优化应用程序性能都至关重要。...
这可能包括但不限于断链(切断特定函数调用链),修改Flag(改变进程的属性标志),hook对象(挂起或替换系统函数调用),抹psp表(修改进程安全属性结构),csscs表(可能是指进程的安全上下文或系统服务描述表),...