一、什么是进程

从用户的角度来看进程是程序的一次执行过程。
从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。
进程是资源分配的最小单位。
每一个进程都有自己独立的地址空间与执行状态。
像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程。

二、进程数据结构

进程的静态描述:由三部分组成:PCB、有关程序段和该程序段对其进行操作的数据结构集。
进程控制块:用于描述进程情况及控制进程运行所需的全部信息。
代码段:是进程中能被进程调度程序在CPU上执行的程序代码段。
数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据

堆栈段:程序运行时需要在这里做数据运算,存储临时数据,开辟函数栈等。在Linux下,栈是高地址往低地址增长的。

三、进程与程序

进程是动态的,程序是静态的。
进程的生命周期是相对短暂的,而程序是永久的。
进程数据结构PCB。
一个进程只能对应一个程序,一个程序可以对应多个进程。

四、进程状态变迁

运行状态(TASK_RUNNING)
可中断睡眠状态(TASK_INTERRUPTIBLE)
不可中断睡眠状态(TASK_UNINTERRUPTIBLE)
暂停状态(TASK_STOPPED)
僵死状态(TASK_ZOMBIE)

五、进程控制块

进程描述信息

进程标识符用于唯一的标识一个进程。

进程控制信息

进程当前状态
进程优先级
程序开始地址
各种计时信息
通信信息

资源信息

占用内存大小及管理用数据结构指针
交换区相关信息
I/O设备号、缓冲、设备相关的数结构
文件系统相关指针

现场保护信息

寄存器
PC
程序状态字PSW
栈指针

六、进程标识

每个进程都会分配到一个独一无二的数字编号,我们称之为“进程标识”(process identifier),或者就直接叫它PID.
是一个正整数,取值范围从2到32768
当一个进程被启动时,它会顺序挑选下一个未使用的编号数字做为自己的PID
数字1一般为特殊进程init保留的

七、进程的创建

不同的操作系统所提供的进程创建原语的名称和格式不尽相同,但执行创建进程原语后,操作系统所做的工作却大致相同,都包括以下几点:
给新创建的进程分配一个内部标识,在内核中建立进程结构。
复制父进程的环境
为进程分配资源, 包括进程映像所需要的所有元素(程序、数据、用户栈等),
复制父进程地址空间的内容到该进程地址空间中。
置该进程的状态为就绪,插入就绪队列。

八、进程的销毁

进程终止时操作系统做以下工作:
关闭软中断
:因为进程即将终止而不再处理任何信号;
回收资源:释放进程分配的所有资源,如关闭所有已打开文件,释放进程相应的数据结构等;
写记帐信息:将进程在运行过程中所产生的记帐数据(其中包括进程运行时的各种统计信息)记录到一个全局记帐文件中;
置该进程为僵死状态:向父进程发送子进程死的信号(SIGCHLD),将终止信息status送到指定的存储单元中
转进程调度:因为此时CPU已经被释放,需要由进程调度进行CPU再分配。

九、终止进程的5种方法

从main函数return返回
调用exit(C库函数)
调用_exit(系统调用)
调用abort(产生SIGABRT信号,异常终止)
由信号终止(如ctrl+c 产生的 SIGINT信号)

需要注意的是main函数返回会调用exit;exit会调用_exit; exit会调用fflush,但_exit不会调用fflush。

atexit可以注册终止处理程序,ANSI C规定最多可以注册32个终止处理程序。终止处理程序的调用与注册次序相反

int atexit(void (*function)(void));

UNIX环境高级编程——进程基本概述的更多相关文章

  1. UNIX环境高级编程——进程管理和通信(总结)

    进程管理与通信 进程的管理 进程和程序的区别: 进程: 程序的一次执行过程   动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令.数据的有序集合  是个文件,可直观看到 程序program ...

  2. UNIX环境高级编程——进程控制

    一.进程标识符 ID为0的进程是调度进程,常常被称为交换进程.该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程.进程ID 1通常是init进程,在自举过程结束时由内核调用.ini ...

  3. Unix环境高级编程—进程控制(二)

    一.函数wait和waitpid 今天我们继续通过昨天那个死爹死儿子的故事来讲(便于记忆),现在看看wait和waitpid函数. #include<sys/wait.h> pid_t w ...

  4. UNIX环境高级编程——进程关系

    一.终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),控制终端是保存在PCB中的信息,而我们 ...

  5. UNIX环境高级编程——进程环境

    一.main函数 C程序总是从main函数开始.当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址--这是由连接编译器设置的,而连接编译器则由 ...

  6. Unix环境高级编程—进程关系

    终端登录 网络登录 进程组 getpgrp(void) setpgid(pid_t pid, pid_) 会话: 是一个或多个进程组的集合,通常由shell的管道将几个进程编成一组. setsid(v ...

  7. UNIX环境高级编程——信号基本概述和signal函数

    一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...

  8. unix环境高级编程----进程控制wait()

    一.wait()函数 当一个进程中调用wait()函数的时候 (1)假设其全部的子程序都还在执行,则堵塞 (2)假设一个子进程已终止.则等待父进程获取其终止状态. (3)假设没有子进程,则返回错误. ...

  9. Unix环境高级编程—进程控制(三)

    一.解释器文件 解释器文件属于文本文件,起始行形式为: #! pathname[optional-argument] 我们创建一个只有一行的文件如下: #!/home/webber/test/echo ...

随机推荐

  1. event工具集

    eventTool = { // 页面加载完成后 readyEvent : function(fn) { if (fn==null) { fn=document; } var oldonload = ...

  2. Logistic Regression 算法向量化实现及心得

    Author: 相忠良(Zhong-Liang Xiang) Email: ugoood@163.com Date: Sep. 23st, 2017 根据 Andrew Ng 老师的深度学习课程课后作 ...

  3. JavaScript 比较和逻辑运算符

    比较和逻辑运算符用于测试 true 或者 false. 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等. 给定 x=5,下面的表格解释了比较运算符: 实例 »实例 » 大于 大于或等于 ...

  4. Java程序员的现代RPC指南

    Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...

  5. Android开发艺术探索——第二章:IPC机制(中)

    Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...

  6. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

    数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...

  7. 游戏引擎cocos2d-android使用大全

    做手机游戏需要三个核心的类,即:SurfaceView,SurfaceHolder,Thread.帧数要在30帧左右是最好的. cocos2d游戏引擎 封装好的框架,可直接使用 cocos2d-and ...

  8. 源码推荐:移动端商城(微信小程序源代码) WebView离线缓存

    移动端商城(微信小程序源代码)(上传者:腾讯攻城师jack) 功能包括:商品橱窗,商品搜索,购物车,结账等功能. TableView嵌套webView自适应高度(上传者:linlinchen) tab ...

  9. Android时遇到R.java was modified manually! Reverting to generated version!

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 进入 eclipse后clipse Menu >Projects > clean 这么做就把R文件删了,但是别担心, ...

  10. ORACLE数据库学习之SQL性能优化详解

                                                                                    Oracle  sql 性能优化调整 ...