码迷,mamicode.com
首页 > 系统相关 > 详细

进程管理

时间:2019-10-28 22:30:55      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:生成   数字   子进程   转储   分配   nal   pat   sort   用户id   

1. 进程相关概念 a. 应用程序被用户提请给内核,并得以执行便变成了进程,进程只是被调入内存的应用程序的一个副本。 b. 进程都具有统一的数据结构称为task struct用于存储进程的元数据信息,如进程的名称、PID、优先级等,也就是ps 命令看到的那些进程属性字段,应用程序被提请给内核变为进程后,该应用程序对应进程的父进程就会复制一份自己的task struct,给 2. 进程内存管理 a. CPU中指令分为普通指令和特权指令,用户空间的应用进程就都可以执行普通指令,特权指令只能被内核执行 b. 用户空间 c. 内核空间 3. 进程优先级 ? 对于进程数量来说CPU计算资源是有限的,如果没有一套有效的资源分配机制进程就会出现争抢资源的现象,为了确保进程高效稳定有序的运行,操作系统设计了140个队列并将进程分别放入这140个队列之间,通通调度策略为队列中的进程分配CPU资源,使得所有进程能够按系统规定的制度有序运行。这里的资源分配机制有两个重要的术语:队列和调度策略 ? 进程优先级 :Linux操作系统为提供了140个队列来调度进程使用CPU资源,队列就是我们常说的进程优先级,进程优先级的取值范围是0-139,值越小优先级越高,优先级按取值范围还分为实时优先级和非实时优先级 ? 进程优先级调整 : ü 严格来讲优先级对用户来说是不可以修改的,用户只能通过nice值来干预静态优先级 ü 实时优先级:能过内核动太调整也称为动态优先级,取值范围0-99,用户不可以过通nice值调整,但可以通过其它命令调整。 ü 非实时优先级:用户可以过程nice值来干预非实时优先级也称为静态优先级,取值范围100-139。 ü nice值:nice值的取值范围是:-20到19,分别对应非实时优先级的100-139,因此nice越小优先级越高。仅管理员可以调低nice值,普通用户不能调低nice值。 □ 调整原理:一个进程启动默认nice值为0,对应优先级为120,调整后的优先级=当前优先级+nice值,因此用户以指定nice值启动进程就可以达到调整优先级的效果。 □ nice进程具备继承性,子进程继承父进程 ü 调整优先级: ü nice以指定nice值启动进程:nice -n -5 ping 192.168.39.2 ü renice修改已运行进程的优先级:renice -n -5 `pidof ping` ? 调度策略:操作系统如何为队列内的进程分配CPU资源,操作系统提供了5种调度策略来管理队列内的进程,通过命令chrt可以查看和修改每个进程进的调度策略 ü 实时进程调度策略:SCHED_FIFO(先进先出调度算法)、SCHED_RR(默认策略,以时间片轮询调度,一个时间片为100ms) ü 非实时进程调度策略:SCHED_OTHER, SCHED_IDLE,SCHED_BATCH 4. 命令选项风格: ? Unix/Posix风格 ü 命令后的选项,可以分组,便必须以连字符开头,如ps -aux。 ü 选项无需加参数的,可以组合在一起,如:sed -n -r 可以写成 sed -nr ? BSD风格,即命令后的选项,不可以与连字符同用,多个选项可以分组输写 ? GNU风格 ü 即长选项,命令后的参数,可以分组,但必须以双横线开头,如:ps --help。 ü 命令行选项以两个连字符‘--‘开头,后跟选项名称,选项后面使用空格或者等号 紧接着取值 5. 查看进程树 a. pstree -p显示进程名后附加PID b. pstree -u显示进程名后附加用户名 c. {}代表线程 6. 基于程序名查询进程编号 a. pidof 进程名 7. 进程查询工具ps命令 ? BSD风格选项 ü ps 不加任何选项则仅显示当前登录会话shell环境下的进程列表 ü ps a 选项包括所有终端中的进程 ü ps x 选项包括不链接终端的进程(显?当前?户所运?的所有进程,包括前台和后台守护进程) ü ps u 选项显示进程所有者的信息 ü f 选项显示进程树,相当于 --forest ü k|--sort 属性 对属性排序,属性前加- 表示倒序 ü o 基于进程struck数据结构中的属性字段 定制显示的字段信息 ü L 显示支持的进程属性字段列表 (该选项下列出的进程属性字段可以供o选项字制显示输出) ü 实例:利用o选项字制显示字段,并结合k选项基于指定字段排序,如基于%mem字段排序 ü ps o pid,%cpu,%mem,size k %mem ü ? UNIX风格 ü -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 ? PS命令输出字段 ü USER :进程执行用户 ü PID:进程ID ü %CPU:CPU利用率 ü %MEM:内存利用率 ü VSZ:内核承诺分配给进程的虚似存内存(KB) ü RSS:进程占用的真正物理内存(KB) ü TTY:终端号 ?号与终端无关的 ü STAT:进程状态 ü START:进程启动到PS命令查询时所使用的时间 ü TIME:进程实际占用CPU运行的时间(获取的时间分) ü COMMAND:进程执行的命令行 ü EUESR:进程生效用户effect user(例:passwd被设置了SUID权限,则在进程发起者执行的进程实际生效用户上下文件为passwd文件所属组的) ü RUSER:进程的发起者real user ? STAT进程状态 ü R 处理运行状态,正在被CPU执行或在可执行队列中的进程处于该状态 ü S 处于睡眠状态(Sleep可中断睡眠)等待事件或信号触发唤醒,S状态进程task_struct结构被放入对应事件的等待队列中,一旦事件触发则会被唤醒 ü D 处于深度睡眠状态(Deep sleep不可中断睡眠) ü T 暂停状态或跟踪状态, ü Z 僵死状态, ü X 死亡状态, ü Z: zombie ü +: 前台进程 ü l: 多线程进程 ü L:内存分页并带锁 ü N:低优先级进程 ü <: 高优先级进程 ü s: session leader,会话(子进程)发起者 8. 进程的信号干预: ? kill可以向进程发送信息,干预进程的运行状态 ? 常用信号,kill -l可以查看系统支持的所有信号,Linux中共有64种信号,信号功能介绍:man 7 signal查看帮助,kill -l {1..64} 查看对应信号名称 ü 1号SIGHUP:无须关闭进程而让进程重新读取配置文件Systemctl reload选项就是服务进程发送HUP信号使进程重新加载配置文件 ü 2号SIGINT:interrupt中止,打断正在运行的进程,相当于Ctrl+c ü 3号SIGQUIT 相当于ctrl+\ ,不是真正结进程,发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件 ü 9号SIGKILL:强制杀死运行中的进程,不管理进程是否完成读写操作,会丢失进程数据,打开的文件可能会被损坏。一般应对僵死态或死亡态的进程 ü 15号SIGTERM:终止正在运行的进程,会给进程转储缓存数据的机会。如果kill不加任何信号则默认会发送第15号信号。 ü 18号SIGCONT:唤醒后台休眠的进程继续运行,此时在后台运行,在进程所有的终端会话下使用fg命令可以恢复到前台运行。bg命令就是向进程发送18号信号 ü 19SIGSTOP:将正在运行的进程转入后台休眠,相当于Ctrl+z ,Stopped暂停 ? 进程前后台切换 ü Ctrl+z将前台运行的进程转入后台休眠(可以看到会提示[#]+ Stopped,#表示任务号,可以通过fg、bg发前18号信号唤醒任务),在进程所有的终端会话下使用fg命令可以恢复到前台运行。相当于向后进程发送第19号信号SIGSTOP ü fg将后台任务转到前台:jobs查看后台休眠及运行任务,使用fg加上任务编号即可前后台任务放到前台运行,相当于向后台进程发送第18号信号SIGCONT ü bg将前台任务转到后台:bg即可以将前台任务转到后台运行,也可以唤醒后台休眠的任务,相当于向进程发前第18号信号SIGCONT ü Ctrl+c 中止前台运行的任务 ü Ctrl+d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF ü Ctrl+\ 发送 SIGQUIT 信号给前台进程查并不执行并生成 core 文件,如ping命令想看 ? 信号的表示方式: ü 信号的数字标识;例:1,2,3, ü 信号的完整名称,以SIG后加信号名称简写,例:SIGHUP,SIGINT,QUIT ü 信号的简写名称;例:HUP,INT,QUIT ? 基于进程名杀死所有进程 ü killall 进程名:例:killall httpd ? 基于模式搜索进程 ü pgrep: ü 语法:pgrep [options] pattern ü 选项: -u uid: effective user,生效者 -U uid: real user,真正发起运行命令者 -t terminal: 与指定终端相关的进程 -l: 显示进程名 -a: 显示完整格式的进程名 -P pid: 显示指定进程的子进程 ü 实例: ü pkill ? 向进程发送信号 ü 语法:kill -s [信号] pid 注:-s可以省略,而直接用-加上信号再指定PID即可。 ü 例:四种不同的发送信号的方法 ? kill -9 `pidof ping` ? kill -HUP `pidof ping` ? kill -SIGHUP `pidof ping` ? kill -s 9 `pidof ping`

进程管理

标签:生成   数字   子进程   转储   分配   nal   pat   sort   用户id   

原文地址:https://blog.51cto.com/154773488/2446094

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!