Linux中的进程状态

一、查看进程

在根目录下的/proc中存放所有的进程。

进程PCB启动时会记录当前自己的可执行程序路径,默认是在当前路径,查看可用指令ll/proc/pid其中的cwd就是当前工作路径。

要修改工作路径可以用chdir(const char* path)函数来实现。

二、进程状态

1、Linux的进程状态

在struct task_struct中有一个int status来表示该进程的状态,更改进程状态就是更改该参数即可。

2、进程状态介绍

R(running):运行,在运行队列中。

S(sleeping):休眠,一般是等待资源就绪,或者是可中断睡眠。

D(disk stop):深度睡眠,不可被删,也不可中断睡眠,只有进程自己醒来或者重启。

T(stopped):停止,等待被运行。

t(tracing stop):被追踪而停止,例如调试到断点处。

X(dead):死亡,进程结束释放完资源就死亡。

Z(zombie):僵尸进程,当子进程已经结束,但是父进程还未结束,子进程的资源没法被原来的父进程释放就是僵尸进程,这样就会导致内存泄漏。

孤儿进程:当父进程已经结束,子进程还未结束就是孤儿进程,这时候就会被bash领养保证资源正常释放。

直接在命令行中启动的进程的父进程是bash

三、进程的阻塞,挂起和运行

1、运行,并发,并行

(1)运行

进程在CPU的运行队列中就是处在运行状态。

(2)并发

一个进程一旦持有CPU不会一直运行到进程结束,会基于时间片进行轮转调度,如果超时就会被放到运行队尾。让多个进程切换,在一段时间内同时推进代码就叫做并发。

(3)并行

任何时刻都有多个进程在运行就是并行。例如有多个CPU在工作。

2、阻塞

在Linux中通常表现为S/D,也就是浅/深睡眠。

定义

把进程从运行队列中剥离,放入到设备等待队列中,等待资源就绪,叫阻塞状态。放到运行队列中就是唤醒。

阻塞和运行的状态切换往往伴随着PCB被链入到不同的队列中,入队列的不包括代码和数据,只有task_struct

3、挂起

本质就是把代码和数据放到外设,等待资源就绪后再换入。

目的是节省内存资源,但是频繁地换入换出会影响效率。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值