进程管理
进程的基本状态
创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完 成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行 执行状态:进程处于就绪状态被调度后,进程进入执行状态 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时 无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
NICE值取值范围是--20----19,一共40个级别,这个值越小表示优先级越高值越大优先级越低。
nice值越高抢占资源的能力就越差,nice值越低的抢占资源的能力就越强。
nice命令只能调试100-139即(-20-19)优先级 nice -n 10 bash 将nice值设置为10 renice 修改调整进程优先级 renice -n 10 66908(pid) 进程优先级 系统2优先级:数字越小,优先级越高 0-139:各有140个运行队列和过期队列 实时优先级: 99-0 值最大优先级最高 nice值:-20到19,对应系统优先级100-139 Big O:时间复杂度,用时和规模的关系 O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
进程状态
Linux内核:抢占式多任务 进程类型: 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程 前台进程:跟终端相关,通过终端启动的进程 注意:两者可相互转化 进程状态: 运行态:running 就绪态:ready 睡眠态: 可中断:interruptable 不可中断:uninterruptable 停止态:stopped,暂停于内存,但不会被调度,除非手动启动 僵死态:zombie,结束进程,父进程结束前,子进程不关闭
进程查看命令
支持三种选项:
ps命令
UNIX选项 如-A -e BSD选项 如a GNU选项 如--help
常用选项:默认显示当前终端中的进程
a 选项包括所有终端中的进程 x 选项包括不链接终端的进程 u 选项显示进程所有者的信息 f 选项显示进程树,相当于 --forest k|--sort 属性 对属性排序,属性前加- 表示倒序 o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem L 显示支持的属性列表 -C cmdlist 指定命令,多个命令用,分隔 -L 显示线程 -e 显示所有进程,相当于-A -f 显示完整格式程序信息 -F 显示更完整格式的进程信息 -H 以进程层级格式显示进程相关信息 -u userlist 指定有效的用户ID或名称 -U userlist 指定真正的用户ID或名称 -g gid或groupname 指定有效的gid或组名称 -G gid或groupname 指定真正的gid或组名称 -p pid 显示指pid的进程 --ppid pid 显示属于pid的子进程 -t ttylist 指定tty,相当于 t -M 显示SELinux信息,相当于Z 状态
Head标头: USER 用户名 UID 用户ID(User ID) PID 进程ID(Process ID) PPID 父进程的进程ID(Parent Process id) SID 会话ID(Session id) %CPU 进程的cpu占用率 %MEM 进程的内存占用率 VSZ 进程所使用的虚存的大小(Virtual Size) RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。 TTY 与进程关联的终端(tty) STAT 进程的状态:进程状态使用字符表示的(STAT的状态码) R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。 S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。 I 空闲 Idle Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。 D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。 T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。 P 等待交换页 W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。 X 死掉的进程 < 高优先级进程 高优先序的进程 N 低优先 级进程 低优先序的进程 L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内 s 进程的领导者(在它之下有子进程); l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads) + 位于后台的进程组 START 进程启动时间和日期 TIME 进程使用的总cpu时间 COMMAND 正在执行的命令行命令 NI 优先级(Nice) PRI 进程优先级编号(Priority) WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。 FLAGS 与进程相关的数字标识 自定义选项查看ps axo %cpu,pid,%mem,cmd k %cpu
top命令
操作选项:
1 可以监控每个逻辑cpu的状况 b 打开高亮显示功能,同时高亮显示top命令 h 显示帮助画面,给出一些简短的命令总结说明 k 终止一个进程。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序 r 重新安排一个进程的优先级别 S 切换到累计模式 s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s f 或者F 从当前显示中添加或者删除项目 o或者O 改变显示项目的顺序 l 切换显示平均负载和启动时间信息 m 切换显示内存信息 t 切换显示进程和CPU状态信息 c 切换显示命令名称和完整命令行 M 根据驻留内存大小进行排序 P 根据CPU使用百分比大小进行排序 T 根据时间/累计时间进行排序 W 将当前设置写入~/.toprc文件中
top状态查看
PID 进程id USER 进程所有者 PR 进程优先级 NI nice值,负值表示高优先级,正值表示低优先级 VIRT 进程使用的虚拟内存总量,单位kb RES 进程使用的、未被换出的物理内存大小,单位kb SHR 共享内存大小,单位kb START 进程状态 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU 当前CPU时间占用百分比 %MEM 进程使用的物理内存百分比 TIME+ 进程使用的CPU时间总计,单位1/100秒 COMMAND 进程名称
free内存状态查看
选项:
free [OPTION] -b 以字节为单位 -m 以MB为单位 -g 以GB为单位 -h 易读格式 -o 不显示-/+buffers/cache行 -t 显示RAM + swap的总和 -s n 刷新间隔为n秒 -c n 刷新n次后即退出 total:表示物理内存总量 used:表示总计分配给缓存(包含buffers与cach)使用的数量,但其中可能有部分缓存并未实际使用。buffers:即块设备的读写缓冲区 cache:用来给文件做缓冲。 free:未被分配的内存 shared:共享内存 bufers:系统已分配但未被使用的buffers数量 cached:系统已分配但未被使用的cache数量 vmstat命令:虚拟内存信息
kill命令:向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写
显示当前系统可用信号: kill –l 或者 trap -l 常用信号查看man手册:man 7 signal 杀死进程kill (信号) 进程编号
1 SIGHUP 无须关闭进程而让其重读配置文件 2 SIGINT 中止正在运行的进程;相当于Ctrl+c 3 SIGQUIT 相当于ctrl+\ 9 SIGKILL 强制杀死正在运行的进程 15 SIGTERM 终止正在运行的进程 18 SIGCONT 继续运行 19 SIGSTOP 后台休眠