目录
一.进程管理
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.调度算法
- 先来先服务(FCFS)算法;
- 时间片轮转调度算法;
- 短作业优先算法;
- 最短剩余时间优先算法;
- 高响应比优先算法;
- 优先级调度算法;
- 多级反馈队列调度算法;
3.通信方式
- 消息队列;
- 共享内存;
- 有名管道/无名管道;
- 信号;
- scoket。
4.线程和进程的区别
线程是任务调度和执行的基本单位;进程是资源分配的基本单位;
单个进程可以包含多个线程,单个进程至少包含一个线程,不存在没有线程的进程,也没有不存在于进程的线程;
因为虚拟内存的关系不同的进程互相不知道对方的存在,相对独立,互相有独立的内存空间,地址空间;相同进程内的进程之间之间共享进程的内存空间,文件描述符表,部分寄存器等资源,但是每个线程都有自己独立的线程栈和部分寄存器,线程间访问资源需要考虑互斥问题;不同进程中的不同线程关系和不同进程关系相似,相对独立;
进程创建,销毁,切换代价大;线程创建,销毁,切换小。
进程和线程的优缺点:
进程有利于资源管理和保护,开销大;线程不利于资源管理和保护,需要使用锁保证线程的安全运行,开销小。
5.线程的实现方式
内核级线程:由系统内核创建,撤销,调度的线程。
用户级线程:由用户进程自行调度的线程。
混合级线程:同时支持用户级线程和内核级线程。
内核级线程和用户级线程的区别:
内核线程需要操作系统支持,系统可知;用户级线程,系统调度资源分配是面向进程的,并不可知;
内核级线程创建、调度和撤销类似于进程;用户级线程创建和调度由用户进程控制,需要用户程序控制线程的调度工作;
内核级线程不同线程之间相对独立;用户线程中如果一个线程因其他原因而阻塞则导致整个进程阻塞,相同进程中的其他线程也被阻塞;
内核级线程资源竞争空间为全局;用户级线程资源竞争空间为当前进程。
内核级线程优缺点:
优点:
多核CPU友好,能够实现整整意义上的多线程;
如果单个进程中的一个线程被阻塞,进程中的其他线程仍然能够进程切换运行;
所有阻塞线程的调用都以系统调用实现,代价较小;
缺点:
由内核进行调度,用户的可定制性差;
线程在用户态运行,而线程的切换和调度相关操作在内核实现,进行线程切换时代价相对较高。
标签:ps,管理,PID,线程,内核,linux,进程,CPU From: https://blog.csdn.net/caiji0169/article/details/142267383用户级线程的优缺点:
优点:
线程调度由用户控制,不需要内核参与,控制灵活,相对可控;
不需要内核支持,可以在不支持多线程的系统中实现;
线程创建、销毁、调度和切换等管理操作的代价比内核级线程小;
线程能够利用的表空间和堆栈空间比内核线程多;
缺点:
资源分配和调度按照进程进行,单个进程中同一时间只有一个线程运行,多处理机不友好;
当进程中的一个线程因缺页中断等原因阻塞时整个进程都会阻塞。