1、进程的诞生

(1)、进程0和进程1 (内核里边的固有的)

(2)、fork函数和vfork函数用于新进程的产生

2、进程的消亡

(1)、正常终止和异常终止

(2)、进程在运行时需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放这些资源,就会造成资源的丢失)。

(3)、Linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放,譬如open打开的文件没有close的,在程序终止时也会被关闭)。但是操作系统只是回收了这个进程工作时消耗的内存和IO,而并没有回收这个进程本身占用的内存(8KB,主要是task_struct(这个结构体主要是对该进程的描述)和栈内存)

(4)因为进程本身的8KB内存操作系统不能回收,所以需要别人来辅助回收,因此我们的每一个进程都需要一个帮助它“收尸”的人,这个人就是这个进程的父进程。

3、僵尸进程

(1)、子进程先于父进程结束。子进程结束后父进程此时并不一定立即就能帮助子进程“收尸”,在这一段(子进程已经结束且父进程尚未帮其“收尸”)子进程就被称为僵尸进程。

(2)、子进程除task_struct和栈外其余内存空间皆以清理。

(3)、父进程可以使用wait或者是waitpid以显式回收子进程的剩余待回收内存资源并且获取子进程退出状态。

(4)、父进程也可以不使用wait或者waitpid回收子进程,此时父进程结束时一样会回收子进程的剩余待回收内存资源。(这样设计是为了防止父进程忘记显式调用wait、waitpid来回收子进程从而造成内存泄漏)

4、孤儿进程

(1)、父进程先于子进程结束,子进程成为一个孤儿进程。

(2)、Linux系统规定:所有的孤儿进程都自动成为一个特殊进程(进程1,也就是init进程)的子进程。(这样设计的目的也是为了避免造成内存泄漏)。

Linux进程的诞生和消亡的更多相关文章

  1. (49)LINUX应用编程和网络编程之四 Linux进程全解

    补充: 1.  C程序的执行过程: C编译器调用链接器,链接器设置可执行程序文件的启动起始地址(启动例程),启动例程获得内核传递来的 命令行参数和环境变量值,为调用main函数做准备.[实际上该启动例 ...

  2. Linux进程管理 (1)进程的诞生

    专题:Linux进程管理专题 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 L ...

  3. Linux进程控制(一)

    1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别.程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度 ...

  4. linux 进程(一)---基本概念

    一.进程的定义         进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程.   二.进 ...

  5. Linux进程管理专题

    Linux进程管理 (1)进程的诞生介绍了如何表示进程?进程的生命周期.进程的创建等等? Linux支持多种调度器(deadline/realtime/cfs/idle),其中CFS调度器最常见.Li ...

  6. Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...

  7. Linux进程管理 (2)CFS调度器

    关键词: 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 Linux进程管理 ( ...

  8. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】

    转自:http://blog.csdn.net/gatieme/article/details/51589205 日期 内核版本 架构 作者 GitHub CSDN 2016-06-02 Linux- ...

  9. linux进程管理之进程创建(三)

    在linux系统中,许多进程在诞生之初都与其父进程共同用一个存储空间.但是子进程又可以建立自己的存储空间,并与父进程“分道扬镳”,成为与父进程一样真正意义上的进程. linux系统运行的第一个进程是在 ...

随机推荐

  1. 17 ~ express ~ 分类的显示 ,修改 和 删除

    一,前台显示 /views/admin/category.html {% extends 'layout.html' %} {% block main %} <ol class="br ...

  2. bzoj 4195程序自动分析

    先离散一下,然后并查集就好了. (一开始作大死,没全离散,WA一片) #include<bits/stdc++.h> #define INF 0x7fffffff #define LL l ...

  3. Relu激活函数的优点

    Relu优点: 1.可以使网络训练更快. 相比于sigmoid.tanh,导数更加好求,反向传播就是不断的更新参数的过程,因为其导数不复杂形式简单. 2.增加网络的非线性. 本身为非线性函数,加入到神 ...

  4. c++程序—变量

    #include<iostream> using namespace std; int main() { int a = 10; cout << "a=" ...

  5. [GWCTF 2019]枯燥的抽奖

    0x00 知识点 种子爆破 工具 http://www.openwall.com/php_mt_seed 0x01 解题 查看源码进入check.php zOHF0Cxp49 <?php #这不 ...

  6. 1.3 this深度面试题

    var big = "1" var obj = { big: "2", showBig: function() { return this.big }, } o ...

  7. python 流行库、库的基本用法

    进入github,输入python 点击see topic 进入python流行的库  链接 https://github.com/topics/python 1.QuantLib 金融衍生品数据库 ...

  8. 萤火虫系统(firefly) RK3399 python3 安装 tensorflow

    前言: 继续之前在RK3399上安装深度学习的一些环境,主要碰到的坑给大家分享一下,为了让大家少走弯路.这次是安装tensorflow,话不多说,直接开撸. --------------------- ...

  9. 求1+2+3+…..+n

    [问题]求1+2+3+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). [思路]由于题目好多运算符不能用,我们只有想到使用递 ...

  10. js数组全等

    js 数组全等(对象) if(this.eqOrNotEq(arr)){} eqOrNotEq(arr) { return !arr.some(function(value, index) { ret ...