• 【Linux】进程


    进程简单来说就是运行的程序,由PCD(process control block)和程序代码和数据组成,本篇文章重点讲解进程的概念和Linux操作系统的进程细节。


    进程的信息被放在一个叫做进程控制块的数据结构(PCB)中,在Linux操作系统下的PCB是task_struct

    1.进程查看

    windows操作系统中可以在任务管理器中查看

     在Linux中也能查看进程

    在根目录下有一个proc文件里面可以查看当前系统实时进程信息

     如果想要查看具体的进程信息,可以用ps ajx查看进程信息,同时结合grep指令筛选出我们想要的那个进程

    比如:

    先创建一个简单的程序

    当这个程序运行起来的时候就进程

    用ps和grep查看mytest进程的信息

     第二条是grep的进程信息,如果想把第二条屏蔽掉,可以一个grep -v选项

    当我们在学C语言的文件操作的时候,总是会听到当前路径这词,其实这个当前路径指的就是进行的路径

     2. 获取pid、ppid

    pid就相当于一个进程的标识,类似于我们的身份证,可以用getpid()接口调用(这个是系统接口,在windows下不一定能调用)

    ppid就是parent pid是父进程的pid可以通过getppid()获得

     

     

     可以发现pid在变但是ppid是不变的,29520是bash进程,一般程序的父进程都是bash

    Linux中也能像windows操作系统一样可以强行终止进程

    3.创建子进程 

    fork():创建子进程

    有两个返回值,一是给父进程返回子进程的pid,而是给子进程返回0

    子进程继承父进程的代码

     比如:

     由于fork之后又两个进程执行这段代码,所以会输出两个hello world

    通过pid和ppid可以发现第二个进程是第一个进程的子进程

    4.进程状态

    运行态: 进程只要在运行队列中就叫做运行态,代表进程已经做好准备,随时可以调度

    终止态:改进程还在,只不过永远不运行,随时等待被释放

    阻塞态:cpu运行速度很快,当进程在申请其他资源的时候(网卡、显卡等),需要把cpu资源让出来,其他资源申请完成后进入就绪状态,等待获取cpu

    挂起态:如果内存不足的时候,OS会将短期内不会被调度的进程代码和资源换到磁盘上,然后释放空间,只留一个PCB,腾出更多空间,因此内存不足的时候,往往伴随着磁盘被高频访问

    Linux进程状态:

    R(运行态):

     当我们执行这个程序的时候,会一直打印hello world,但该进程的状态并不是R

     这是因为打印到显示器上,而外设的调度比cpu慢很多,所以cpu大部分时间都在等显示器准备就绪

    当我们把printf和sleep删掉后,进程状态就是R了

     

     S、D(阻塞态):

    S和D的区别是D是深度睡眠,当进程在长时间调度磁盘的时候,经常长时间处于休眠状态,为了防止被OS误杀掉,所以有了D状态,在D状态下的进程不能被OS杀掉

    Z、X:

    Z是僵尸状态,X是死亡状态

    当Linux进程退出的时候,一般不会立马进入X状态回收资源,而是进入Z状态

    Z状态是为了维护退出信息,让父进程或OS读取

    如果父进程还在运行,而子进程退出了,那么子进程就会进入僵尸态

     如果父进程在子进程之前被干掉,那子进程的父进程会变为OS,子进程退出的时候需要将退出信息交给OS,这种进程称为孤儿进程

    T、t(暂停)

    当我们在调试时、下载暂停等场合中,进程都会进入暂停状态

    5.进程优先级

    优先权高的进程有优先执行的权利,可以改善系统性能

    Linux种进程的优先级由进程的PRI属性决定,值越小优先级越高

    修改进程的优先级是通过对进程NI的属性进行修改

     进入top后按“r”–>输入进程PID–>输入nice值 就能修改进程优先级

    进程的优先级PRI(new)=PRI(old)+nice

    每次设置nice时,PRI都从60开始

    nice的取值范围是-20-19,一共40级

    6. 并发与并行

    并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

    并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

    操作系统会给每一个进程赋予一个时间片的概念,多个进程会通过交叉的方式,让多个进程代码在一段时间内都得到推进

    在进程切换的过程种,需要把cpu中的进程数据存放回PCB,这样在下一个周期执行到这个进程是可以接着上一次的执行

  • 相关阅读:
    世界环境日 | 周大福用心服务推动减碳环保
    day3 力扣
    【OpenCV学习】第5课:图像模糊(均值滤波,高斯滤波)
    MybatisPlus多表连接查询 支持一对一、一对对、多对多查询
    Java -【字符串,数组,哈希表】常用操作
    Apifox很难不爱
    PHP脚本导出MySQL数据库
    mqtt综合实战(中国移动OneNET+ESP8266 AT指令)
    基于安卓android微信小程序的旅游系统
    MindSpore:本地编译无法找到python
  • 原文地址:https://blog.csdn.net/holle_world_ldx/article/details/126733725