首页 > 系统相关 >3.linux进程管理

3.linux进程管理

时间:2024-09-14 23:24:38浏览次数:14  
标签:ps 管理 PID 线程 内核 linux 进程 CPU

目录

一.进程管理

1.进程概念

2.进程生命周期和状态

3.进程管理process

3.1 ps-静态查看进程

3.2 top-动态查看进程

3.3. 使用信号控制进程

3.4 nice-优先级

二.作业控制jobs

三.虚拟文件系统proc

四. 线程(可看可不看)

1.状态

2.调度算法

3.通信方式

4.线程和进程的区别

5.线程的实现方式


一.进程管理

1.进程概念

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

  • 已分配内存的地址空间;
  • 安全属性,包括所有权凭据和特权;
  • 程序代码的一个或多个执行线程;
  • 进程状态;

程序:二进制文件,静态/usr/bin/passwd   ./usr/sbin/useradd

进程:是程序运行的过程,动态,有生命周明及运行状态。

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

  • 一个文件;
  • 被配内存的地址空间;
  • 有权限限制;
  • 程序代码的一个或多个副本(也叫执行线程);
  • 编辑像人一样拥有状态;

程序是具有执行代码和执行权限的文本文件。

进程则是运行起来的程序,获得计算机各方面的资源。

2.进程生命周期和状态

进程状态分为:

睡眠(Sleeping) --- S

运行(Running) -- R

可运行的(Runnable)

未响应(Zombie) -- 不死不活(僵尸) -- Z

暂停(Stopped)-- T

fork就是父进程创建一个新的子进程开始一个进程,创建无非是复制拷贝粘贴

进程的生命周期是由系统程序fork出来的子程序,具备一定父进程的资源(权力,内存空间,PID)。直到运行完毕,退出系统

S 睡眠。通常是在等待某个事件的发生,如一个信号或有输入可用

R 运行。严格来说,应是“可运行”,即在运行队列中,处于正在执行或即将运行状态

D 不可中断的睡眠(等待)。通常是在等待输入或输出完成
T (terminate)停止。通常是被shel作业控制所停止,或者进程正处于调试器的控制之下

Z (zombie)僵尸进程,通常是该进程已经死亡,但父进程没有调用wait类函数来释放该进程的资源
N (nice)低优先级任务
s 进程是会话期首进程
+ 进程屋于前台进程组
1 进程是多线程的
< 高优先级任务

3.进程管理process

3.1 ps-静态查看进程

静态查看进程ps

ps aux //静态查看进程,全部

ps aux | head -2 //只看头两行

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

ps a

显示现行终端机下的所有程序

ps u

以用户为主的格式来显示程序状况

ps x

不以终端机来区分

进程排序

ps aux -- sort - % 列名 //降序

ps aux -- sort % 列名 //升序

(列名:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

eg: ps aux -- sort % CPU //按照CPU升序打印出来当前的进程状况

进程的父子关系

ps -ef

UID PID PPID C STIME TTY TIME CMD

自定义显示字段 (列)

ps axo 要显示的列

eg:ps axo user, pid, ppid, %men,command | head -3

USER:运行进程的用户
PID:进程ID
%CPU:CPU占用率
%MEM:内存占用率
VSZ:占用虚拟内存
RSS::占用实际内存
TTY:进程运行的终端
STAT:进程状态 man ps VSTATE)
START:进程的启动时间
TIME:进程占用CPU的总时间
COMMAND:进程文件,进程名

3.2 top-动态查看进程

上半部分:

top - 11:45:08 up 18:54,        4 users,          load average: 0.05,   0.05,    0.05

程序名 - 系统时间 运行时间,   登录用户数,   CPU负载:5分钟,          10,       15

Tasks:       176 total,  1 running,  175 sleeping,  0 stopped,   0 zombie

总进程数:                     运行数1,    睡眠数175,      停止数0,     僵死数0

%Cpu(s):         0.0 us,   0.3 sy,   0.0 ni,       99.7 id,   0.0 wa,    0.0 hi,    0.0 si,    0.0 st

Cpu使用占比:  us用户,  sy系统,  ni优先级,  id空闲,    wa等待,   hi硬件,   si软件,   st虚拟机

KiB Mem: 3865520 total, 1100000 free,  580268 used,      2185252 buff/cache

物理内存K: total总共4G,   free空间1G,    userd使用500M,  cache缓存硬盘内容2G

KiB Swap: 4063228 total,      4063228 free,  0 used,    2917828 avail Mem

交换分区:     总共4G,            4G空闲

下半部分:

PID USER PR NI VIRI RES SHR S %CPU %MEM TIME+ COMMAND

PID:序号

USER:启动用户

PR 和 NI:优先级

VIRIL:虚拟内存

RES:常驻内存

SHR:共享内存

S:状态--S T R Z

%MEM:占比

TIME + COMMAND: 运行时间 + 程序/命令

常用内部命令:

h|?帮助

M 按内存的使用排序

P  按CPU使用排序

N  以PID的大小排序

<   向前

>   向后

z 菜色,Z设置菜色,使用数字调整

常用小技巧:

top

//回车,立即刷新。按z彩色显示,按F通过光标设置

top -d 1

//每1秒刷新一次

top -d 5 -p PID1,PID....

//查看指定进程的动态信息

3.3. 使用信号控制进程

kill -序号 进程PID

eg:kill - 1 8878 //重新加载8878进程的配置

像2、3、20这些是通过键盘的快捷键来进行控制进程的

信号9和15:

1.创建两个文件,查看终端号

# cd /home/test

# touch file1 file2

#tty //查看终端号

/dev/pts/0 //此时这个终端叫做pts0

2.通过一个终端窗口打开vim

# vim file1 //在pts0的终端打开文本记事工具

iiiiiiii

3.新建一个终端窗口打开vim

# tty

/dev/pts/1

# vim file2 //在pts1的终端打开文本记事工具

zzzzzz

4.再新建一个终端窗口,查询两个进程

# ps aux | grep vim

5.发送15信号

# kill - 15 9305

正常结束

5.发送9信号

# kill - 9 9372

直接杀死

# tty查看终端号,不同窗口其终端号是不同的(TTY)

平时尽量用15号信息,但比如程序僵死了,不听话了,就可以用9号信息直接强制终止

3.4 nice-优先级

Linuxj进程调度以及多任务,每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序

优先级范围和特性:

查看:

# ps axo pid, command, nice -- sort =-nice | head -5

显示特定的列且只显示前5行,按照nice降序排列

启动具有不同nice级别的进程:

默认情况:启动进程时,通常会继承父进程的nice级别,默认为0

# sleep 6000 &

启动一个程序且立马进入睡眠状态7000秒,不管输入什么都没有反应,

&将其丢到后台去不阻碍输入,默认优先级是0,会输出该程序的PID

# nice - n - 5 sleep 6000 &

将启动的程序的优先级设为-5

更改现有进程的nice进程:

# renice - 优先级值 PID

二.作业控制jobs

作业控制是一个命令功能,也叫后台运行

观察占领前台的现象

# sleep 2000

//运行一个程序,当前终端无法输入,观察占领前台的现象,大部分命令输入已经失效

ctrl + c终止进程

或者ctrl + z立刻将其丢到后台,不过丢进去后是暂停状态 -- bg 序号可以使其再次运行起来

运行后台程序

# sleep 3000 &

ps查询所有程序

# ps axo PID

jobs查看后台进程

# jobs

[1]- Running sleep 3000 &

调动后台程序至前台

# fg 1

//将作业1([1])调回到前台

ctrl + z

# bg 1

//将重新丢到后台的暂停的程序重新运行起来

消灭后台程序

# kill 1

//终止掉PID为1的进程

# kill %1

//杀死作业序号为1的后台程序

三.虚拟文件系统proc

采集服务器自身内核、进程运行的状态信息

CPU:

/proc/cpuinfo

内存:

/proc/meninfo

内核:

/proc/cmdline

在开发板驱动程序编写中,proc下用来查看tty设备驱动、中断次数、行程规等也是非常有用的,留个伏笔,后面在开发板驱动专栏中会上传。

四. 线程(可看可不看)

1.状态

1.新建状态:当线程被创建到开始执行任务之间的状态,一般对应的是线程对象被创建到执行start结构之间的过程;

2.就绪状态:线程开始执行之后,只是表明线程准备好执行,需要CPU调度进行执行;

3.运行状态:线程被CPU翻牌子,开始执行任务;

4.阻塞状态:线程因为等待其他事件触发或者等待资源而发生阻塞,一般分为:

  • 等待阻塞:线程执行了wait;
  • 同步阻塞:因为同步锁获取失败,而进入阻塞;
  • 其他阻塞:因等待获取IO资源而阻塞或者线程调用了sleep;

5.死亡状态:线程任务执行完成,可以被销毁。

2.调度算法

  1. 先来先服务(FCFS)算法;
  2. 时间片轮转调度算法;
  3. 短作业优先算法;
  4. 最短剩余时间优先算法;
  5. 高响应比优先算法;
  6. 优先级调度算法;
  7. 多级反馈队列调度算法;

3.通信方式

  1. 消息队列;
  2. 共享内存;
  3. 有名管道/无名管道;
  4. 信号;
  5. scoket。

4.线程和进程的区别

线程是任务调度和执行的基本单位;进程是资源分配的基本单位;

单个进程可以包含多个线程,单个进程至少包含一个线程,不存在没有线程的进程,也没有不存在于进程的线程;

因为虚拟内存的关系不同的进程互相不知道对方的存在,相对独立,互相有独立的内存空间,地址空间;相同进程内的进程之间之间共享进程的内存空间,文件描述符表,部分寄存器等资源,但是每个线程都有自己独立的线程栈和部分寄存器,线程间访问资源需要考虑互斥问题;不同进程中的不同线程关系和不同进程关系相似,相对独立;

进程创建,销毁,切换代价大;线程创建,销毁,切换小。

进程和线程的优缺点:

进程有利于资源管理和保护,开销大;线程不利于资源管理和保护,需要使用锁保证线程的安全运行,开销小。

5.线程的实现方式

  内核级线程:由系统内核创建,撤销,调度的线程。

  用户级线程:由用户进程自行调度的线程。

  混合级线程:同时支持用户级线程和内核级线程。

  内核级线程和用户级线程的区别:

内核线程需要操作系统支持,系统可知;用户级线程,系统调度资源分配是面向进程的,并不可知;

内核级线程创建、调度和撤销类似于进程;用户级线程创建和调度由用户进程控制,需要用户程序控制线程的调度工作;

内核级线程不同线程之间相对独立;用户线程中如果一个线程因其他原因而阻塞则导致整个进程阻塞,相同进程中的其他线程也被阻塞;

内核级线程资源竞争空间为全局;用户级线程资源竞争空间为当前进程。

  内核级线程优缺点:

优点:

多核CPU友好,能够实现整整意义上的多线程;

如果单个进程中的一个线程被阻塞,进程中的其他线程仍然能够进程切换运行;

所有阻塞线程的调用都以系统调用实现,代价较小;

缺点:

由内核进行调度,用户的可定制性差;

线程在用户态运行,而线程的切换和调度相关操作在内核实现,进行线程切换时代价相对较高。

  用户级线程的优缺点:

优点:

线程调度由用户控制,不需要内核参与,控制灵活,相对可控;

不需要内核支持,可以在不支持多线程的系统中实现;

线程创建、销毁、调度和切换等管理操作的代价比内核级线程小;

线程能够利用的表空间和堆栈空间比内核线程多;

缺点:

资源分配和调度按照进程进行,单个进程中同一时间只有一个线程运行,多处理机不友好;

当进程中的一个线程因缺页中断等原因阻塞时整个进程都会阻塞。

标签:ps,管理,PID,线程,内核,linux,进程,CPU
From: https://blog.csdn.net/caiji0169/article/details/142267383

相关文章

  • 超详细全面的宿舍管理系统课程设计(详细分析及源码分享)
    第一章系统概述    宿舍管理查询软件是一个教育单位不可缺少的部分它的内容对于学校的决策者和管理者来说都至关重要所以宿舍管理查询软件应该能够为用户提供充足的信息和快捷的查询手段。以前各个学校的学生宿舍管理基本上都是靠手工进行,但随着各个学校的规模增大,有关......
  • USB总线-Linux内核USB3.0 Hub驱动分析(十四)
    1.概述USBHub提供了连接USB主机和USB设备的电气接口。USBHub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为RootHub,下行口连接下一级Hub的上行口或者USB设备。经过Hub的扩展,一个USB主机可以和多个USB设备通信。USBHub有如下特性:良好的......
  • python+flask计算机毕业设计民宿管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者对个性化住宿体验需求的日益增长,民宿作为一种新兴的住宿方式,在全球范围内迅速崛起。传统酒店已难以满足旅行......
  • Linux相关命令的使用
    一、压缩和归档的命令1.1压缩和解压缩操作对象是单个文件压缩方式:gzip--->.gzbzip--->.bz2xz--->.xz上是三种压缩方式:压缩率依次递减,压缩速率依次递减。gzipfile//将文件file按gzip格式进行压缩//压缩之后原文件就不存在了,只留下名为file.gz的压缩后......
  • Linux相关命令及shell命令
    一、链接文件1.1软链接(符号链接)ls-l能看到类型为链接文件的都是软连接软连接类似于windows的快捷方式创建软连接的方式:ln-s被链接的文件文件名要生成的文件名注意:1.我们一般创建软连接时最好使用绝对路径否则一旦相对位置发生变化链接就会失效。2.如果被链......
  • (Linux)嵌入式打卡第十一天
    指针数组简介概念:指针数组的本质是一个数组,只不过数组里面的每一个元素都是指针;定义格式:数组类型*数组名[成员个数];eg://定义一个数组,数组里面的每一个元素都是int*类型int*arr[5];指针数组使用#include<stdio.h>intmain(int......
  • Linux下载软件及卸载
    Linux发展史汤姆森·肯---UNIX之父斯托曼发起GNU计划莱纳斯linux之父现在主流的基于Linux的系统的发行版本centos、Ubuntu、Deepin(国产)、RedHat、...查看Ubuntu版本:cat/etc/issue查看内核版本:uname-a嵌入式层次结构一、用户空间命令脚本(命令的集合)app----......
  • 某群管理系统存在SQL注入漏洞
    有些事情不是看到希望才去坚持,而是坚持了才会看到希望。漏洞实战访问url:http://xxx/login.aspx登录界面如下:输入万能密码:用户名:admin'or'1'='1密码输入:123456或任意成功登录:文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。免责声明:由于传播或利用此文所提......
  • Python 课程8-多线程编程和多进程编程
    前言        在现代编程中,处理并发任务是提高程序性能的关键之一。Python提供了多线程(threading)和多进程(multiprocessing)两种方式来实现并发编程。多线程适用于I/O密集型任务,而多进程则更适合CPU密集型任务。通过这两种技术,你可以高效地处理大规模数据、加速......
  • linux 模拟题
    一,填空题linux主要是基于各种       来完成各种操作。打印当前所在的位置的命令是       linux的选项是哪两种        当前登录的用户tom,切换至用户家目录        想要使用命令本身的作用       ......