Linux进程管理

Linux进程管理

1. 进程

1.1 概述

计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
如果站在内核的角度来看:进程是分配系统资源的单位

1.2 进程的组成

进程的组成: PCB 、程序段和数据段
系统中存在大量的进程,操作系统通过创建PCB(process control black)进程控制块管理进程。PCB就是描述进程的结构体。
在Linux系统中,PCB 是 task_struct

struct task_struct
{
	PID:描述本进程的唯一标示符,用来区别其他进程.
	STAT:进程状态
	PRI:进程的优先级,相对于其他进程的优先级,先后问题,值越小优先级越高。
	程序计数器:程序中正在被执行的下一条指令的地址
	内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
	上下文数据:进程执行时处理器的寄存器中与进程强相关的的临时数据
	I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
	记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
	进程创建出来,CPU要执行它对应的代码,然而CPU很少,进程很多。因此OS内有一个调度模块,
	负责较为均衡的调度每一个进程,较为公平的获得CPU资源。
	...
	其他信息
}

2.查看进程

2.1 ps

ps -axj 或 ps -aux

在这里插入图片描述

ls /proc 进程文件

在这里插入图片描述

ll /proc/24263 进程属性数据

在这里插入图片描述

2.2 top 动态的

在这里插入图片描述

3.进程状态

3.1 操作系统源代码和转换图

static const char * const task_state_array[] = {
"R (running)", /* 0 */  运行状态
"S (sleeping)", /* 1 */ 浅度睡眠状态,也叫中断睡眠
"D (disk sleep)", /* 2 */深度睡眠状态,也叫不可中断睡眠
"T (stopped)", /* 4 */  暂停状态 
"t (tracing stop)", /* 8 */ 跟踪状态
"X (dead)", /* 16 */ 死亡状态
"Z (zombie)", /* 32 */ 僵尸状态
};

在这里插入图片描述

kill 指令

在这里插入图片描述

3.2 R 运行状态(running)

R 运行状态(running): 并不意味着进程一定在运行中 进程可能在运行队列中等或者正在被执行,就叫做 运行态,随时可以被CPU调度。

运行状态 R ——— 死循环

#include<stdio.h>
int main(){
     while(1);
     return 0;
}

在这里插入图片描述

R:后台进程,R+:前台进程 其他也一样+代表前台进程

  • 前台进程:./myproc,输入指令无效bash的命令行解释器就停止工作了,可以被【Ctrl +C】终止
  • 后台进程:./myproc &,可以执行指令,【Ctrl +C】 不能终止进程,退出进程要用kill

3.3 S 浅度睡眠状态(sleeping) ,也叫做可中断睡眠(interruptible sleep)

等待非CPU资源就绪。这种休眠是可被换醒的,我们可以 Ctrl + C 退出循环,而此时的进程就没了,也就是说它虽然是一种休眠状态,但是它随时可以接收外部的信号,处理外部的请求。

睡眠状态S —— sleep

#include<stdio.h>
#include<time.h>
int main(int num,char *arg[]){
        while(1){
          printf("hello work\n");
          sleep(1);
        }
        return 0;

}

在这里插入图片描述
挂起状态(也属于S 状态):当内存不足的时候,OS提供适当的置换进程的代码和数据到磁盘中,PCB不换(好比你学籍还在,人把你赶走了)进程的状态就叫做挂起。
在这里插入图片描述

你现在正在等待某种资源的时候,正巧内存不足了,内存不够是你正在阻塞状态,所以把你的代码数据置换到磁盘里,所以叫做“挂起阻塞”。

3.4 D 深度睡眠状态(Disk sleep),也叫不可中断睡眠状态(uninterruptible sleep)

进程处于D状态,不可被杀掉,耶稣来了都没用,只能等这个进程自动醒来,kill -9 都杀不掉它,也得等它醒来 (关机除外,有可能关机都要被磁盘写入卡住,只能拔电源).

3.5T暂停状态(stopped)

可以通过发送 SIGSTOP(kill -19) 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行.
在这里插入图片描述
在这里插入图片描述

这时,发送信号恢复状态,会发现S后面没有+号,[ctrl + C] 也没法终止程序,这是因为你的暂停和继续让进程变成了后台运行
kill -9 pid // 直接杀死

3.6 Z僵尸状态(Zombie)

一个进程已经退出,但还不允许被OS释放,处于一个被检测的状态(好比出事了,警察要拉警戒线去调查原因),一般是父进程或者OS,想要得知该进程的结果,如何检测呢?这个我们后文再细说
僵尸进程的危害:进程的退出状态被一直维持,本身就需要数据维护,占用了内存空间,长时间的占用就会导致内存泄漏

4. linux中ctrl+c

  作用:
  1.当执行命令过程中,想中断命令的执行。比如查看几百M的文本内容。
  2.当执行输入某些命令时,发现需要需要执行其他命令。此时不需要回删,使用ctrl+c会自动进入新命令输入。

5.程序优先级

cpu资源分配的先后顺序,就是指进程的优先权(priority)

ps -axl

在这里插入图片描述

  • PRI :代表这个进程可被执行的优先级,其值越小越早被执
  • 行 NI :代表这个进程的nice值,优先值的修正数据;调整进程优先级,在Linux下,就是调整进程nice值
  • UID : 代表执行者的身份
    注意:需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。nice值是进程优先级的修正修正数据
  • 优先级 = 老的优先级 + nice
  • nice其取值范围是-20至19,一共40个级别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非常@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值