linux进程管理,你不得不知道的事儿?

说明:本文所有案例均在linux 2.6.32-642.el6.x86_64验证成功

linux进程管理

在linux系统中,触发任何一个事件,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID。同时依据触发这个进程的用户与相关属性的关系,给予这 个PID一组有效的权限设置。

进程基本概念

一、进程和程序

程序
程序是一组有序的静态指令,是一种静态的概念。
通常为二进制程序放置在存储媒介中(如硬盘、光盘等),以物理文件的形式存在,如:/etc/init.d/httpd本身是一个软件代码;

进程
进程是程序的一次运行活动,属于一种动态的概念。
程序被触发执行后,执行者的权限和属性、程序的程序代码与所需的数据等都会被加载到内存中,操作系统会给予这个内存内的单元一个PID,如:如果启动/etc/init.d/httpd会产生相对应的进程;

注意
程序和进程无一一对应关系,一个程序可以由多个进程共用,一个进程在活动中可顺序地执行若干个程序;

二、进程和线程

我们以一个案例来理解这2个名词:
人:线程;桌子:进程;开一张桌子:进程开销

这里写图片描述

进程是资源调度的最小单位,线程是CPU调度的最小单位;

三、子进程和父进程

在linux系统中,系统调用fork创建进程,子进程是由一个进程产生的进程,产生这个子进程的进程为父进程

我们来看一个实验
这里写图片描述
由上例可以看到,后一个进程的父进程为前一个进程

正常情况下,父进程终止子进程终止,特别的:
- 孤儿进程:父进程终止,子进程未终止,则子进程变为孤儿进程,其父进程会自动指向init进程;
- 僵尸进程:爸爸不知道我的傻儿子已经挂掉了,所以儿子就变成为了僵尸(进程);
我们可以用ps -Z来找到僵尸进程,再用kill -s SINGNAL pid来杀死他,注意这个pid为父进程的id(僵尸进程本身已经死掉了,你不能杀死死人~~)
- 死锁:若干个进程/线程在执行过程中,因争夺资源而造成互信等待的现象;

四、前台进程和后台进程

前台进程
在shell提示出打入命令后,创建一个子进程,运行命令,shell等待命令退出,然后返回到对用户给出提示符,这个命令与shell异步运行,即在前台运行,用户在它完成前不能执行另一个命令。

后台进程
在shell提示出打入命令后,后随一个&,运行命令,shell创建的子进程运行此命令,但不等待命令退出,直接返回到对用户给出提示符,这个命令与shell同步运行,即后台运行。

五、进程的几种状态

进程和程序的主要区别是动态性,动态的产生和终止,从产生进程到终止进程可以具有的基本状态为就绪态、运行态、阻塞态

就绪状态:当进程已经分配到除CPU以外的必要资源,只要再获得CPU,便可立即执行,这时的状态称为就绪状态;
运行状态:进程已获得CPU,其程序正在执行;
等待状态:进程的执行受到阻塞,比如:请求I/O、申请缓冲空间等等,把这种暂停状态称为阻塞状态,又称阻塞状态。
#通常将相同状态的进程排成一个或者多个队列,如:就绪队列、阻塞队列等;

  • 进程的阶段?
    进程的一生中主要有3个阶段:等待、运行、停止(成功执行后或者收到杀死进程信号后);
    特别地,杀死的进程仍然留在进程表中则是僵尸;

六、进程调度

当你运行一个程序时,系统产生一个父进程以及调用fork方式复制若干个子进程,然后暂停进程以exec的方式加载实际要执行的程序,当子进程终止的时候,会返回一个exit信号,父进程会调用wait命令读取子进程状态为死亡,然后把子进程从进程表中移除;

fork
系统先以fork的方式复制一个和父进程相同的中间缓存子进程
唯一区别就是PID不同,且这个暂存进程还会多一个PPID的参数

这里写图片描述子进程如何实现继承?
fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境,使得子进程实现了继承

exec
然后暂存进程开始以exec的方式加载实际要执行的程序,新的进程名为daidai,最终子进程的程序代码就为daidai

同步

  • 同步机制
    临界区:在任何时刻只允许 一个线程对共享资源进程访问,适用于进程内部
    互斥量:拥有互斥对象权限才能访问资源,该对象只有一个;
    信号量:允许多个线程在同一时刻访问同一资源;(类似操作系统的PV,P申请操作,V释放操作)
    事件:通过通知操作的方式保持线程同步

  • 同步通信

写在最后的话

本人只是一个在linux学习大军中搬砖的小小的一员,技术水平有限,文中难免出现不妥或者错讹,欢迎大家在评论区多多指正,共同进步,不尽感激!

原创不易,转载请务必保留出处http://blog.csdn.net/wsxxdwwzjdy/article/details/78489789

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值