linux进程管理
Linux是一个多任务的操作系统,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。
1.进程及作业
程序是完成么重任务的软件,而进程是运行中的程序。一个运行中的程序可能有多个进程,比如瑞星杀毒软件在运行的时候就有多个进程,分别提供不同的服务。
作业是一个正在执行的进程,可以包含多个进程。比如“cat/etc/passwd|grep user|more”这个作业就包含了3个进程
2.进程控制
linux提供了进程管理工具,如ps、kill、pgrep、top等。可以用来查看和控制进程的运行。
01.进程监视——ps
ps用来显示当前系统进程列表。其语法格式如下。
[root@localhost~]# ps [-lujfaxr]
参数说明如下:
-l:长格式输出。
-u:按用户名和启动时间的顺序显示进程。
-j:显示进程,使用任务格式。
-f:显示进程,使用树形格式。
-a:显示所有用户(包括其他用户)的全部进程。
-x:显示无控制终端的进程。
-r:显示运行中的进程。
ww:避免中断详细参数。
注:因为ps的输出列表可能很长,所以为了查看方便,应当添加相关参数执行。
实例1:查看当前系统进程,列表显示结果,
[root@localhost~]# ps aux | more
可按q 退出。
使用ps查看当前运行的所有进程
实例2:查看httpd进程是否运行(Apache服务是被启动了)。
[root@localhost~]# ps aux | grep httpd
02.终止进程——kill、killall、pkill、xkill
在linux下可通过kill、killall、pkill、xkill终止进程
使用kill指令来终止一个进程,其命令行语法如下。
[root@localhost~]# kill [-s singnal\-p][-a][--] PID..
[root@localhost~]# kill -l [signal]
参数说明如下。
-s: 指定发送信号。
-p: 模拟发送信号。
-l: 指定信号的名称列表。
PID: 要终止进程的ID号。
signal:信号。
实例:用kill来终止vsftpd进程。
用kill终止进程需要用到进程ID,二进程ID的获取需要结合ps指令,所以终止vsftpd进程,必须分步完成。
第一步:执行以下指令查询vsftpd进程的PID。
[root@localhost~]# ps aux |grep vsftpd
第二步:vsftpd的ID进程为29835,然后执行以下指令。
[root@localhost~]# kill 29835
注:可以用“kill -9”来强制终止一些顽固的进程,比如“kill -9 29835”。
03.killall/pkill。
更直观的终止进程的方法是使用killall或pkill指令,但需要知道进程的名字。其语法格式如下。
[root@localhost~]# killall 进程名
[root@localhost~]# pkill 正在运行的程序名
实例:终止运行中的vsftpd集成。直接使用以下指令即可。
[root@localhost~]# killall vsftpd
[root@localhost~]# pkill vsftpd
04.xkill。
在图形界面下,最好用的进程终止工具是xkill。执行xkill,然后单击需要关闭的窗口图形即可。
05.进程控制——top。
top是一个动态的进程监视工具,提供交互式操作,可以直接终止进程。其命令格式如下。
-b:使用批处理模式。
-c:显示程序并显示程序的完整相关信息,如名称、路径等。
-i:忽略闲置或已经冻结的程序。
-d:以秒为单位,设定监控程序执行状况的时间间隔。
-n:设定监控信息的更新次数。
-p<进程号>:指定进程。
-s:安全模式。
-u:指定用户名。
-v:显示版本信息。
-h:显示帮助信息。
-P:根据CPU使用大小进行排序。
-T:根据时间、累计时间排序。
-q:退出top命令。
-m:切换显示内存信息。
-t:切换显示进程和CPU状态信息。
-c:切换显示命令名称和完整命令行。
-M:根据使用内存大小进行排序。
-W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
06.进程优先级控制——nice、renice
在linux操作系统中,进程之间是竞争资源(比如cpu和内存)的关系。优先级别是通过谦让度来体现的。谦让度的值越大,表示进程优先级别越低。谦让度的值为负值或0,表示高优先级,对其他进程不谦让,即拥有优先占用系统资源的权利。谦让度的默认值为10,范围为-20~19,用来调整程序谦让度的指令时nice,语法格式如下:
[root@localhost~]# nice [-n adjustment][-adjustment][--adjustment=adjustment][--help][--version]
参数说明如下:
-n adjustment:将原有谦让度增加adjustment。
--help :显示帮助信息。
--version :显示版本信息。
实例一:以谦让度+5的方式运行gaim程序。
[root@localhost~]# nice -n 5 gaim
用来修改正在运行中的程序(进程)的优先级的指令是renice,语法格式如下:
[root@localhost~]# renice priority [[-p]pid..][[-g]pgrp..][[-u]user..]
参数说明如下:
-p pid:重新指定进程优先级。
-g pgrp:重新制定进程群组的优先级。
-u user:重新制定特定用户进程的优先级别
实例二:设置进程ID为2853的程序的谦让度为15
[root@localhost~]# renice 15 2853
3.作业控制
在单一终端界面下,同时管理对个作业的操作叫作作业控制(job control)。若要同时进行多个不同的工作,就需要打开多个终端窗口。利用作业控制,只要打开一个终端窗口,就就可以进行不同的工作了。
01.将命令放到后台执行—&
在正真将程序放到后台执行之前,哟必要先了解直接控制的作业,即前台作业(比如用vi编辑文本),以及在内存中自动运行的作业,即后台作业(用户无法直接控制)
有一些作业是可以自动运行的。要同时进行多个作业,就必须要将这一部分作业放到后台,以便继续有需要控制和接受输入的前台作业。如何将作业放到后台运行呢?最简单的办法就是使用&指令。如果正在进行编译Linux核心的操作,则可执行以下命令。
[root@localhost~]# make menuconfig
[root@localhost~]# make clean
执行完这两步,就会开始编译核心,而整个过程是自动进行的,所以可以将它放在后台。
[root@localhost~]# make bzimage &
[1] 29853 ; 工作编号、PID
[root@localhost~]# ;在这里继续输入指令,进行其他的操作。
02.将当前作业“暂停”到后台—ctrl+z
如果正在用vi编辑文档,当发现有不认识的单词时,则需查询其他的词典软件。其实不需要关闭vi,查完单词后再打开vi,可暂时把vi存放到后台。可使用ctrl+z指令把正在进行的作业暂停放到后台。
[root@localhost~]# vi.bash_profile
;按下ctrl+z将他放到后台
[1]+stopped vi.bash_profile ;[1]表示第1个作业,+表示是后台默认的作业
;stopped表示该作业处于停止状态,用ctrl+z放入后台太的程序都处于停滞状态
[root@localhost~]# ;在这里就可以打开词典程序查询单词了。
03.观察当前后台作业状态—jobs
可以使用jobs程序查询放入后台的作业,格式如下。
[root@localhost~]# jobs [-lnprs]
参数说明如下。
-l:列出作业号和PID。
-p:显示选定作业的进程组引导符的进程标识。
-n:显示在最后一次通知后停止或退出的作业。
-r:只显示在后台运行的进程。
-s:只列出在后台暂停的进程。
实例:查看当前后台作业及其PID信息,可使用以下指令。
[root@localhost~]# jobs -l
04.从后台恢复作业—fg
若将作业放到了后台,则在合适的时候要将它们恢复,可使用fg指令实现,语法格式如下:
[root@localhost~]# fg [job number]
实例: 恢复刚才放入后台的vi.bash_profile进程。
第一步:先使用jobs指令查看后台作业。
[root@localhost~]# jobs
[2]- stopped top
[3]+ stopped vi.bash_profile
注:可以看出vi指令的作业号是3。
第二步:执行fg指令将vi.bash_profile进程放回前台。
[root@localhost~]# fg 3
05.让进程在后台运行—bg
使用ctrl+z可以将当前作业“暂停”到后台,使用&让进程在后台运行,但是如何让在后台暂停的进程在后台情启动运行呢?可以使用bg指令,语法格式如下。
[root@localhost~]# bg [job number]
实例:让top指令在后台运行。
[root@localhost~]# make bZimage
[1]+stopped bZimage ;按下ctrl+z将它暂停到后台
[root@localhost~]# jobs
[1]+stopped make bZimage ;在后台处于暂停状态
[root@localhost~]# bg 1
[1]+make bZimage & ;后台运行
结束
......