栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux进程概念

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux进程概念

进程概念
  • 进程概念
      • 什么是进程?
      • 进程控制块:pcb
      • 如何理解创建进程?
      • 如何理解退出进程?
      • pcb-结构体内容分类:
  • 查看进程
        • 通过系统目录查看
        • 通过ps命令查看
  • 进程状态
        • R运行状态
        • S睡眠状态
        • D磁盘休眠状态(深度睡眠)
        • T停止状态
        • X死亡状态
        • Z(zombie)-僵尸进程
        • 孤儿进程
  • 进程优先级
        • 什么是优先级
        • 优先级存在的原因

进程概念 什么是进程?

进程就是一个正在运行的程序,在操作系统角度讲,进程就是一个pcb,是操作系统对一个正在运行的程序的描述,通过这个描述实现对程序的调度管理,在linux中是一个task_struct结构体。(只要把程序(运行起来)加载在内存里那就是进程)

操作系统如何管理进程:先描述、再组织

进程控制块:pcb

为什么要有pcb?:操作系统要进行软硬件资源管理,因为要管理就必须先描述、再组织,因为要描述,所以必须要有pcb结构体。
在linux内核中将pcb用双链表的结构组织起来(一个进程对应一个pcb),用链接指针来完成pcb和pcb之间的关系。所以,操作系统要找到进程,那么只需要找到链表的头就可以。

如何理解创建进程?

把一个进程中的可执行程序加载到内存中。

如何理解退出进程?

退出进程就是在pcb双链表将该节点删除掉。

pcb-结构体内容分类:

1、标识符:描述本进程的唯一标识符,用来区分其他进程。(pidppid)
2、状态:任务状态、退出代码、退出信号。
3、优先级:相对其他进程的优先级。
4、程序计数器:程序中即将执行的下一条指令的地址。
5、内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
6、上线文数据:进程执行时处理器的寄存器中的数据。

查看进程 通过系统目录查看

通过ps命令查看

进程状态

R运行状态
  • R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。(只要在运行队列中就意味着是运行状态)
S睡眠状态
  • S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
D磁盘休眠状态(深度睡眠)
  • D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T停止状态
  • T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态
  • X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
Z(zombie)-僵尸进程
  • Z(zombie)-僵尸进程:当进程将要退出的时候,在系统层次该进程曾经申请的资源并不是立即被释放,而是要暂时存储一段时间,以供操作系统或是其父进程进行读取,如果退出信息一直未被读取,则相关数据是不会被释放掉的,一个进程若是正在等待其退出信息被读取,那么我们称该进程处于僵尸进程(zombie)。
    注意:首先僵尸进程的存在是必要的,因为进程被创建的目的就是完成某项任务,那么当任务完成的时候,调用方是应该知道任务的完成情况的,所以必须存在僵尸状态,使得调用方得知任务完成的情况,以便进行相应的后续操作。
    僵尸进程的危害:
    1.进程的退出状态必须被维持下去,因为要告诉关心它的进程(父进程)它的任务现在怎么样了,可是父进程如果一直不读取,那么子进程将会一直处在僵尸状态。
    2.维护退出状态本事就是要用数据进行维护,这也是进程的基本信息,所以僵尸状态一直不退出那么PCB将会一直在维护。
    3.如果一个父进程创建了很多子进程,但是都不进行回收,那么就会造成资源浪费,因为数据结构对象本身就要占内存。
    4.僵尸进程申请的资源是无法回收的,那么僵尸进程越多实际可用的资源就会越少,也就是说僵尸进程会导致内存泄漏。
孤儿进程

在Linux当中的进程关系大多数是父子关系,若子进程先退出而父进程没有对子进程的退出信息进行读取,那么我们称该进程为僵尸进程。但若是父进程先退出,那么将来子进程进入僵尸状态时就没有父进程对其进行处理,此时该子进程就称之为孤儿进程。若是一直不处理孤儿进程的退出信息,那么孤儿进程就会一直占用资源,此时就会造成内存泄漏。因此,当出现孤儿进程的时候,孤儿进程会被1号init进程领养,此后当孤儿进程进入僵尸状态时就由int进程进行处理回收。

#include 
#include 
#include 
int main()
{
	 pid_t id = fork();
	 if(id < 0){
	 perror("fork");
	 return 1;
 }
 else if(id == 0){//child
	 printf("I am child, pid : %dn", getpid());
	 sleep(10);
 }else{//parent
	 printf("I am parent, pid: %dn", getpid());
	 sleep(3);
	 exit(0);
 }
 return 0;
}
进程优先级 什么是优先级

优先级实际上就是获取某种资源的先后顺序,而进程优先级实际上就是进程获取CPU资源分配的先后顺序,就是指进程的优先权,优先权高的 进程有优先执行的权力。

优先级存在的原因

优先级存在的主要原因是资源有限。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/828402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号