Linux 之 进程管理 -- 进程管理(kill,nice,r
1. kill
在进程管理中的应用
还记得,之前在Linux 之 进程管理 -- 工作管理 (job control)中,我们有提到 通过
kill -signal %jobnumber
的 方式 管理bash背景中的工作吗?(jobnumber
就是通过jobs
获得的bash中的工作号码)当然kill的功能不止局限于bash的工作控制,在今天学习的进程管理中同样适用。
这里借用鸟哥的图,把kill的一些常用代号详细解释一下,弱弱得说...
(没什么可神秘的,kill进行 进程管理 的常用代号和之前在 工作管理 中学到的一摸一样嘛)
1.1 通过 kill -signal PID
进程管理
kill -signal PID
(PID就是我们通过ps
或top
观察到的进程号)
- 强调:kill后面直接加
PID数字
与加上%jobnumber
的情况是不同的!(%专门用在bash的工作控制中) - 举例:找出rsyslogd的进程PID,并使其重新读取配置文件
-- 找出PID的操作:ps aux | grep 'rsyslogd' | grep -v 'grep' | awk '{print $2}
;翻译成人话:通过ps aux
获得系统的各项进程情况,撷取出rsyslogd
的进程(考虑到grep 'rsyslogd'
实质上是一个grep
进程,所以后面用grep -v 'grep'
除去),并打印第二列的PID号码
-- 为rsyslogd传递“重新读取配置文件”的信号:kill -1 PID
orkill -SIGHUP PID
既然我们到目前为止学了两次
kill
,那便在这里做一下总结:工作模式
kill -signal XXX
- kill 可以帮我们将这个
signal
传送给XXX
:(%jobnumber)或者是某个 PID(直接输入数字)。- 想传递什么信息就用什么
signal
,详细的signal
信息可以通过kill -l
或man 7 signal
查询(不要因为人家名叫杀死
就认为它只能杀掉进程时用,功能多多得包含在signal
。。。)
1.2 通过killall -signal 指令名称
进程管理
这是懒人的做法,因为考虑到kill
后面只能接jobnumber
或PID
,这便要配合ps
或pstree
等命令,我不想手打那么多命令怎么办?killall -signal 指令名称
拯救你~
工作模式: killall [-iIe] [command name]
-
-i
interactive的意思,交互式的,若需要删除时,会出现提示字符给用户 -
-e
exact 的意思,表示“后面接的command name 要一致”,但整个完整的指令 -
-I
指令名称(可能含参数)忽略大小写
可以这么理解:kill
以 进程 为单位进行进程管理,killall
是以指令 为单位进行进程管理(如果要删除某个服务,最简单的方法就是利用killall
,因为他可以将系统当中所有以某个指令名称启动的进程全部删除) - 举例:给予rsyslogd这个指令启动的进程一个SIGHUP的讯号,可以使用命令
killall -1 rsyslogd
orkillall -SIGHUP rsyslogd
下面是鸟哥举的例子
killall 的应用举例
2. 进程的执行顺序管理
2.1了解 Priority 与 Nice 值
我们之前都有提到过Priority 与 Nice 值,他们决定了进程的执行顺序,PRI值越低代表越优先的意思。不过这个PRI值是由核心动态调整的,用户无法直接调整PRI的值。既然我们用户无权干涉PRI,如果我想要调整进程的优先执行顺序时,就要透过Nice值了。PRI与NI的相关性:
PRI(new)=PRI(old) + nice
不过,虽然nice值是可以影响PRI,不过,最终的PRI仍是要经过系统分析后才会决定的。另外,nice值是有正负的,当nice值为负值时,该进程就会降低PRI值,其对应的进程会优先被处理。
注意事项:
- nice值可以调整的范围为-20-19
- root 可随意调整自己或他人进程的Nice值,且范围为-20-19
- 一般使用者仅可调整自己进程的Nice值,且范围仅为0-19(避免一般用户抢占系统资源)
- 一般使用者仅可将nice值越调越高
2.2 调整程序执行顺序的 nice
和 renice
2.2.1 新执行的指令即给予新的nice值 nice
工作模式:nice[-n 数字] command
-
-n
:后面接一个数值,数值的范围-20-19
来看看鸟哥的例子,加深理解
nice 为新执行的 vim 给予新的nice值
2.2.2 已存在进程的nice重新调整 renice
工作模式:renice [number] PID
-
PID :就是需要调整nice值的进程的ID呀~
同样拿鸟哥的例子理解
renice 重新调整已经存在进程的nice
聪明的你有米有注意到,我们修改了自己bash PID的 nice,而bash所触发的ps指令当中的nice也会继承为-5了。所以,整个nice值是可以在父进程-->子进程之间传递的。
postscript:
除了renice
可以调整已存在进程的nice,top
也是可以的,猫毛在上一篇Linux 之 进程管理 -- 进程观察中以“小插曲”的形式介绍过了。(就是在top执行过程中使用r
按键指令)