Linux2 调度进程
在Fedora Core Linux系统中,允许多个进程并发执行。但是,通常情况下,系统中的资源总是有限的,如果系统中并发执行的进程数量过多,就会造成系统的整体性能下降,尤其是当系统中存在黑客进程或者病毒进程时,甚至可能会造成系统瘫痪。因而,有必要根据一定的策略 对系统中的进程进行调度,例如,将可疑的进程终止,将不紧急的进程挂起或者降低其优先级等。系统管理员或者普通用户都可以对进程进行调度,但是执行这种操作时要非常小心,因为有些进程是与系统运行相关联的,不能对它们有错误的调度。
可以使用如下所示的任一种方法进行进程调度:
● 在系统监视器的“进程”选项页中进行调度。
● 在top命令的执行过程中使用交互命令进行调度。
● 在命令行中直接执行各种调度进程的命令。
下面将介绍如何使用命令行命令调度进程。
1.更改进程的优先级
在fedora系统中,各个进程都是具有特定的优先级的,系统在为某个进程分配CPU使用时间时是根据进程的优先级进行判定的。有些进程比较重要,需要先执行,以提高整个程序的执行效率,而有些不太重要的进程,其优先级可以低一些。通常情况下,大多数用户进程的优先级是相同的,但是可以使用Fedora提供的某些命令改变进程的优先级。
通过执行“ps -l”命令可以查看当前用户进程的优先级,如下所示。
[root@yjy ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
linux系统vim编辑器0 S 0 2410 2402 0 76 0 - 1431 wait pts/1 00:00:00 bash
4 R 0 2480 2410 2 78 0 - 1320 - pts/1 00:00:00 ps
[root@yjy ~]#
在上面所示的执行结果中,PRI和NI是两个与进程优先级有关的项。其中,PRI表示进程的优先级,它是由操作系统动态计算的,是实际的进程优先级;NI所表示的是请求进程执行优先级,它可由进程拥有者或者超级用户进行设置,NI会影响到实际的进程优先级。
下面介绍两个可以改变进程优先级的命令。
(1)nice命令
格式:nice 【选项】 命令
功能:在启动进程时指定请求进程执行优先级。
该命令较常用的一个选项是“-n”,n值(即NI值)的范围是从-20到19。-20代表最高的NI优先级,19代表最低的NI优先级。如果没有该参数,将自动设置NI值为10。
默认情况下,只有超级用户才有权提高请求进程的优先级,而普通用户只能降低请求进程的优先级。
例如,要以后台运行方式启动find进程,并配合nice命令将find进程的请求优先级设置为-18,
然后,再以后台运行方式启动vim进程,并配合使用nice命令将vim进程的请求优先级设置为-16。再使用ps -l命令查看设置结果。如图6-13所示。
图6-13 使用nice命令指定NI值
(2)renice命令
格式:renice [+/-n] [-g 命令名称...] [-p 进程标识码...] [-u 进程所有者...]
功能:在进程执行时更改它的NI值,可以通过命令名、PID或者进程所有者名指定进程。例如,以后台运行方式启动find进程,并使用nice命令将该进程的请求优先级设置为10(默认值),然后使用ps -l命令可观察到find进程的NI为10、PID为3483,接着使用renice命令将find进程的优先级更改为-6。等过了一段时间后,再使用renice命令更改find进程的优先级
时,系统提示:没有那个进程了,也即它已终止了,因而该命令是无效的。如图6-14所示。
图6-14 使用renice命令
nice命令是在启动进程时指定NI值的,而renice命令是在进程执行时更改NI值的。
2.挂起和恢复进程
有时,需要将某个进程暂时挂起,被挂起的进程会被投入到后台,处于暂停状态,然后,在需要的时候或者合适的时候再恢复被挂起的进程,使之处于执行状态。要挂起当前运行的前台进程,只需按下Ctrl+z组合键。要恢复进程的运行,可以采用如下两种方式:
● 使用fg命令使被挂起的进程返回至前台运行。
● 使用bg命令恢复挂起的进程并使之在后台运行。
例如,用户正在使用vim编辑器,这时,想创建一个目录以存放所编辑的文件,这就可以按下Ctrl+z组合键(当vim处于命令模式时按下此组合键)将vim进程暂时挂起,等到创建完目录后,再使用fg命令使vim返回至前台继续运行。如下所示:
[root@yjy ~]#
[1]+ Stopped
[root@yjy ~]# mkdir mydir
[root@yjy ~]# fg
除此之外,也可以将被挂起的进程恢复至后台继续运行。例如,使用find命令查a.txt文件,在文件未到之前使用Ctrl+z组合键将其暂时挂起。这时,再执行vim命令,启动vim编辑器,然后将vim进程也挂起,这时系统给出如下的提示:
[2]+ Stopped vim
这表明当前在后台中存在两个进程,被挂起vim进程的序号为2。接着使用“bg 1”命令使被挂起的进程在后台继续运行,这时,系统会给出如下所示的提示:
[1]- find / - &
在该行的最后有一个&符号,这说明该进程正在后台运行,过一段时间后,系统会给出该命令的执行结果,在这之前,也可以使用“fg 2”命令将vim恢复至前台,继续进行文件编辑。整个过程如下所示:
[root@yjy ~]# find / -
[1]+ Stopped find / -
[root@yjy ~]# vim
[2]+ Stopped vim
[root@yjy ~]# bg 1
[1]- find / - &
[root@yjy ~]# /
/home/yin/
[root@yjy ~]#
fg命令和bg命令都既可以带参数也可以不带参数,当不带参数时,它们是对最近被挂起的进程进行操作,如果带上后台进程序号,就是对指定的进程进行操作。
3.终止进程
作为系统管理员,有时,为了使系统具有较佳的整体性能,需要强制终止某个进程,例如,当某个进程已经“僵死”或者某进程占用了大量的CPU时间等情况发生时就有必要终止或者撤销该进程。
要终止一个进程,可使用如下所示的方法:
● 使用Ctrl+c组合键
● 使用kill命令
● 使用killall命令
其中,Ctrl+z组合键可以用来终止一个前台进程,如果要使用它终止一个后台进程,可以先使用fg命令将该进程调到前台,然后再使用Ctrl+c终止该进程。
使用kill命令可以终止一个进程,它实际上是向指定的进程发送特定的信号,从而使该进程根据该信号执行特定的动作,信号可以用信号名,也可以用信号码。该命令的常用使用格式为:
kill [-信号] PID
如果在使用该命令时,未使用信号选项,则kill命令就会向指定进程发送中断信号,该信号的信号名为SIGTERM(也即TERM),信号码为15,如果指定进程没有捕捉到该信号,它
将被终止运行。使用这种方式终止进程时,进程会自动结束并能够处理好结束前的相关事务。当使用不带信号选项的kill命令不能终止某些进程时,可以使用带信号选项的kill命令向进程发送kill信号,kill信号的信号名为SIGKILL(简写为KILL)、信号码为9,这样就会强行终止该进程。但是使用这种方式终止进程可能会带来副作用,例如数据丢失、终端无法恢复到正常状态等。所以应当慎重使用。
例如,要终止运行于后台的find进程,可使用如下所示的方法:
[root@yjy ~]# find / - &
[2] 2952
[root@yjy ~]# kill 2952
[root@yjy ~]# ps
PID TTY TIME CMD
2653 pts/1 00:00:00 bash
2942 pts/1 00:00:00 find
2953 pts/1 00:00:00 ps
[2]- 已终止 find / -
[root@yjy ~]#
当要终止一个进程,而又不知道其PID时,可以先使用命令“ps | grep 进程名”获得进程PID,然后使用带kill信号的kill命令强行“杀死”该进程,如下所示:
[root@yjy ~]# find / -
[1]+ Stopped find / -
[root@yjy ~]# ps | grep find
2997 pts/1 00:00:00 find
[root@yjy ~]# kill -9 2997
[root@yjy ~]# ps
PID TTY TIME CMD
2984 pts/1 00:00:00 bash
3002 pts/1 00:00:00 ps
[1]+ 已杀死 find / -
[root@yjy ~]#
通过执行kill -l命令可以显示kill命令能向进程发送那些信号。
前文已述,使用killall命令也可以将进程终止,该命令使用进程名称来终止相应进程的执行,如果系统中具有多个具有相同名称的进程,这些进程将全部被终止。该命令的使用格式为:
killall [-信号] 进程名
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论