且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

RHEL6入门系列之二十九,进程管理

更新时间:2022-09-24 23:07:47

在上篇博文中提到,进程就是系统中正在运行着的程序,今天就来了解一下在进程管理中的一些常用操作。

一、 查看进程状态
 
了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的角度查看进程状态。
 
1ps命令——查看静态的进程统计信息
 
ps命令是Linux系统中最常用的进程查看工具,它显示的是静态的进程统计信息,也就是在执行ps命令那一刻的进程情况。
格式:ps [选项]
例:不使用任何选项的ps命令,将只显示当前用户在当前终端启动的进程。

RHEL6入门系列之二十九,进程管理

例:使用“-l”选项显示当前进程的详细信息。
使用“-l”选项可以以长格式显示进程的详细信息。

RHEL6入门系列之二十九,进程管理

其中各项含义如下:
S表示进程的状态,其中R表示运行状态或就绪状态;S表示进程正处在休眠状态,但可以被唤醒 (在等待某事件完成);T表示暂停或终止状态;Z表示僵死状态,进程已经停止,但无法移出内存。
UID是进程启动者的用户ID,0表示是由root用户启动的进程。
PID是进程的ID,PID是唯一的,但并不固定。
PPID是父进程的ID。如上图中第一行的bash进程就是第二行ps进程的父进程。父进程和子进程之间的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止,但子进程终止,父进程并不一定终止。
C是进程最近使用CPU的估算。
PRI/NI是进程的优先级,数字越小优先级越高。
SZ是进程占用内存空间的大小,以KB为单位。
WCHAN表示进程是否正在运行中,-表示正在运行中。
TTY是进程所在终端的终端号,其中桌面环境的终端窗口表示为pts/n(n表示打开的是第n个终端窗口),字符界面的终端号为tty1-tty6,“?”表示未知或不需要终端。
TIME是进程从启动以来占用CPU的总时间,尽管有的命令已经运转了很长时间,但是它们真正使用CPU的时间往往很短,所以该字段的值通常是00:00:00。
CMD是启动该进程的命令名称。

例:使用“aux”选项显示系统中所有进程的详细信息。

RHEL6入门系列之二十九,进程管理

a选项,显示当前终端上所有的进程,包括其他用户的进程信息。
u选项,显示面向用户的格式(包括用户名、CPU及内存使用情况等信息)。
x选项,显示后台进程的信息。

主要输出项说明:
USER:用户名。
%CPU:进程占用CPU的时间与总时间的百分比。
%MEM:进程占用内存与系统内存总量的百分比。
VSZ:进程占用的虚拟内存(swap空间)的大小,单位KB。
RSS:进程占用的物理内存的大小,单位KB。
STAT:进程的状态。
START:进程的开始时间。
由于“ps aux”命令显示的内容过多,所以一般都是跟“more”或“grep”命令结合起来使用。
例,分页显示系统中所有进程的详细信息。
[root@localhost ~]# ps aux |more
例,显示系统中所有进程的详细信息并保存到指定的文件中。
[root@localhost ~]# ps aux > ps001.txt
例,查看所有进程的信息,过滤出包含有“bash”的进程信息。

RHEL6入门系列之二十九,进程管理

2top命令——查看进程动态信息

使用ps命令查看到的是静态的进程信息,并不能连续地反馈出当前进程的运行状态。若希望以动态刷新的方式显示各进程的状态信息,可以使用top命令。top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每3秒钟刷新一次,其作用类似于Windows系统中的“任务管理器”。

RHEL6入门系列之二十九,进程管理

由于过于消耗资源,所以在生产环境中top命令用的比较少,这里也就不多说了。

二、 控制进程
 
1、启动进程
 
Linux系统中启动进程有两个主要途径:手工启动和调度启动。与前者不同的是,后者需要事先进行设置,根据用户要求自行启动,如在下篇博文中将要介绍的计划任务。
由用户输入命令,直接启动一个进程便是手工启动进程。手工启动进程又可以分为前台启动和后台启动。
前台启动,这是手工启动进程最常用的方式,如用户输入“ls –l”命令就会启动一个前台进程。当计算机在处理此命令的时候,用户不能再进行其它的操作。
后台启动,如果要让一个程序在后台运行,用户可以在输入完命令之后,在整个命令行的最后加上一个“&”符号。此时程序将转到后台运行,其执行结果不在屏幕上显示,但在此命令的执行过程中,用户仍可以继续执行其它的操作。如:
[root@localhost ~]# ls -al > a.txt &
在后台运行适合于这样一些程序:
  • 该程序运行期间不需要用户的干预。
  • 该程序执行时间较长。
 
2、改变进程的运行方式
 
Linux系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其它操作时特别有用。
例:使用cp命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此按Ctrl+Z组合键将该进程调入后台并暂停执行。
[root@localhost ~]# cp /dev/cdrom mycd.iso
^Z
[1]+ Stopped                 cp -i /dev/cdrom mycd.iso
需要查看当前终端中在后台运行的进程任务时,可以使用jobs命令,结合“-l”选项可以同时显示出该进程对应的PID号。
[root@localhost ~]# jobs -l
[1]+ 5543 停止                  cp -i /dev/cdrom mycd.iso
jobs命令的输出结果中,每一行记录对应一个后台进程的状态信息,行首的数字表示该进程在后台的任务编号。若当前终端没有后台进程,将不会显示任何信息。
恢复进程执行时,有两种选择:用fg命令将挂起的进程放回到前台执行,用bg命令将挂起的进程放回到后台执行。
例:使用fg命令将后台的进程任务重新调入终端的前台执行,指定后台进程对应的任务编号。
[root@localhost ~]# fg 1
cp -i /dev/cdrom mycd.iso
再次按Ctrl+Z组合键将该进程暂停,然后用bg命令将进程放回后台执行:
[root@localhost ~]# bg 1
[1]+ cp -i /dev/cdrom mycd.iso &
 
3、终止进程执行
 
通常终止一个前台进程可以使用Ctrl+C组合键,对于在其它终端上或是在后台运行的进程,就需要用kill命令来终止。
使用kill命令终止进程时,需要使用进程的PID号作为参数。
如使用“jobs –l”命令查出后台运行的进程的PID号,然后用kill命令终止:
[root@localhost ~]# jobs -l
[1]+ 5671 Running                 cp -i mycd.iso /tmp &
[root@localhost ~]# kill 5671
[root@localhost ~]#
[1]+ 已终止               cp -i mycd.iso /tmp
kill命令通过向进程发出终止信号使其正常退出运行,若进程已经无法响应终止信号,则可以结合“-9”选项强行杀死进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不用轻易使用“-9”选项。
例:开启一个vi进程并将其挂起至后台,再使用kill命令强制终止vi进程的运行。
[root@localhost ~]# vim testfile.txt        //打开vim后按Ctrl+Z组合键挂起进程
[1]+ Stopped                 vi testfile.txt
[root@localhost ~]# jobs -l
[1]+ 5679 停止                  vi testfile.txt
[root@localhost ~]# kill 5679
[root@localhost ~]# jobs –l       //正常使用kill命令时并未能杀死vim进程
[1]+ 5679 停止                  vi testfile.txt
[root@localhost ~]# kill -9 5679    //使用“-9”选项强制终止vim进程。
[root@localhost ~]#
[1]+ 已杀死               vi testfile.txt

 

三、综合实例:踢出系统中的可疑用户

Linux是一个多用户的操作系统,在同一时间内可能会有多个用户在同时登录使用系统,下面以用户“zhangsan”为例演示如何将可疑用户踢出系统。
首先我们要能够查看到当前有哪些用户正在登录系统,可以通过“users”或者“who”或者是“w”命令完成这项要求。
users命令最简单,它只能列出当前登录的用户名。
 [root@localhost ~]# users
root root root root
who命令显示的信息就要详细一些,可以列出用户名、终端、登录时间、来源地点等信息。
[root@localhost ~]# who
root     tty1         2011-11-04 16:27 (:0)
root     pts/0        2011-11-04 16:28 (:0.0)
root     pts/1        2012-11-04 21:58 (192.168.232.1)
root     pts/2        2012-11-04 23:02 (192.168.232.1)
w命令显示的信息最详细,可以列出用户名、终端、来源地点、登录时间、执行的命令等参数。
[root@localhost ~]# w
 00:03:34 up 7:37, 4 users, load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               04Nov11 366days 10.91s 10.91s /usr/bin/Xorg :
root     pts/0    :0.0             04Nov11 3:00m 0.12s 0.12s /bin/bash
root     pts/1    192.168.232.1    21:58    1:54m 0.19s 0.19s -bash
root     pts/2    192.168.232.1    23:02    0.00s 0.46s 0.02s w
了解了上述三个命令以后,我们以普通用户“zhangsan”的身份在putty上远程登录Linux系统。

RHEL6入门系列之二十九,进程管理

然后在Linux虚拟机中执行who或w命令找到登录到系统中的可疑用户(zhangsan),并记录下其登录终端的编号(pts/5)。

RHEL6入门系列之二十九,进程管理

查找可疑用户登录终端所对应的PID(20897):

RHEL6入门系列之二十九,进程管理

强制结束该进程,踢出用户。
# kill -9 20897
将进程强制结束之后,所打开的putty窗口也就自动关闭了。


本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1130603