Linux进程管理 – 理论概述

一、什么是进程?

所谓的“进程”,就是一个运行中的程序,每一个”进程”都是一个<程序文件>的运行时!

系统是以进程为单位,来分配一个独立的“内存空间”!

内存空间中,存放着系统分配给该进程的相关资源

每一个进程都分配有独立的内存空间,内存空间中分配着属于自己的资源,所以每一个进程彼此独立,互不影响

在进程当中,我们则以“进程号/PID”来对不同的进程进行区分

总结:进程的特点

1、拥有唯一的<PID进程编号>,它是一个<namespace名称空间>,系统通过<PID进程编号>来区分并管理各个<进程>

2、拥有属于自己的独享的<内存空间>,系统是以<进程>为<最基本的单位>来分配<内存资源>

3、<进程>之间彼此隔离,互不影响

4、一个<程序>可以创建一个或多个<进程>,一个<进程>可以服务于一个或多个<程序>

二、什么是线程?

线程:是一个<进程>可向<CPU>提交并执行的<最大程序代码段>,他是<CPU>可处理的<最基本的代码处理单元>

<线程>的意义:

在<单CPU架构>中,<单个CPU>也或许无法一次性执行<全部的进程代码>,因此需要将<进程代码>分解为<线程>来分片执行

在<多CPU架构>中,<多线程>的程序编程设计,可以充分利用<多CPU>的<并发处理能力>,从而提高<程序的运作性能>

所以,线程可以理解成是进程的下一级单位,但线程本身并不独立于进程,而是由进程本身的资源,所分解、延伸出来的存在

在这里,最难以理解的一点,是线程隶属于进程,并且会共享所属进程的资源

如果把一个进程比喻成一个独立的人,那么线程就像是这个人延伸出去的手脚

所以当一个线程出现问题的时候,所属的进程就有可能会出问题,进而影响到相关的线程……

总结:线程的特点

1、拥有唯一的<LWP线程编号>

2、一个<进程>最少拥有一个<线程>,也可以拥有<多个线程>

3、一个<进程>中的<多个线程>,只能共享争用<进程>自身拥有的<内存空间>,不会另行获取独享的<内存空间>

4、一个<进程>中的<线程>之间,彼此不隔离,会互相影响

三、了解父子进程

进程之父

<PID=1>的<进程>,就是<所有其他进程>的<父进程>

<CentOS 7.x系统>中的进程之父是:systemd进程

父子进程概述

一个<程序>至少产生一个<进程>

一个<大程序>会产生一个<主进程(即:父进程)>,然后产生多个<子进程>,从而可以获取更多的独立的<内存空间>

<父进程>衍生出来的<子进程>,在没有另外指定<运行账户>的情况下,均会继承<父进程的权限>

查看父子进程

# yum install -y httpd 安装一个应用服务程序

# systemctl start httpd 运行一个应用服务程序

# ps -efL | awk ‘NR==1 || /httpd/{print}’

四、了解孤儿进程

什么是<孤儿进程>:

孤儿进程就是没有<父进程>的<进程>

孤儿进程是否有危险性:

<孤儿进程>并不会有什么危害,每当出现一个<孤儿进城>的时候,<内核>就把<孤儿进城>的<父进程>设置为<init(1)进程>或<systemd(1)进程>

<init(1)进程>或<systemd(1)进程>就好像是一个孤儿院,处理一切善后工作

五、了解僵尸进程

僵尸进程是<进程>在关闭过程中的一种<中间状态>,类似于:在<停尸间>等待火化!

所有<子进程>在关闭之后,均会成为<僵尸进程>,然后等待<父进程>来处理,最终释放<子进程PID>,如果<父进程>妥善处理了,就一切正常,最终释放<子进程PID>

是否有危害性:

如果<父进程>因为<各种原因>未能<妥善处理>,则会留下<僵尸进程>,从而耗费<有限的PID标识符资源>

如何发现:<僵尸进程>?

一个正常运行的系统,<僵尸进程>的<停留时间>通常不会很长,因此不会看见!

查看:僵尸进程

[进程状态值 = Z] 的就是 <僵尸进程>

© 版权声明
THE END
喜欢就支持一下吧
点赞2
分享
评论 抢沙发