在上篇博文中提到,进程就是系统中正在运行着的程序,今天就来了解一下在进程管理中的一些常用操作。
了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的角度查看进程状态。
ps命令是 Linux系统中最常用的进程查看工具,它显示的是静态的进程统计信息,也就是在执行ps命令那一刻的进程情况。
例:不使用任何选项的 ps命令,将只显示当前用户在当前终端启动的进程。
例:使用“-l”选项显示当前进程的详细信息。
使用“-l”选项可以以长格式显示进程的详细信息。
其中各项含义如下:
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”选项显示系统中所有进程的详细信息。
a选项,显示当前终端上所有的进程,包括其他用户的进程信息。
u选项,显示面向用户的格式(包括用户名、CPU及内存使用情况等信息)。
x选项,显示后台进程的信息。
%CPU:进程占用 CPU的时间与总时间的百分比。
VSZ:进程占用的虚拟内存( swap空间)的大小,单位KB。
由于“ ps aux”命令显示的内容过多,所以一般都是跟“more”或“grep”命令结合起来使用。
[root@localhost ~]# ps aux |more
例,显示系统中所有进程的详细信息并保存到指定的文件中。
[root@localhost ~]# ps aux > ps001.txt
例,查看所有进程的信息,过滤出包含有“ bash”的进程信息。
2、top命令——查看进程动态信息
使用 ps命令查看到的是静态的进程信息,并不能连续地反馈出当前进程的运行状态。若希望以动态刷新的方式显示各进程的状态信息,可以使用top命令。top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每3秒钟刷新一次,其作用类似于Windows系统中的“任务管理器”。
由于过于消耗资源,所以在生产环境中top命令用的比较少,这里也就不多说了。
在 Linux系统中启动进程有两个主要途径:手工启动和调度启动。与前者不同的是,后者需要事先进行设置,根据用户要求自行启动,如在下篇博文中将要介绍的计划任务。
由用户输入命令,直接启动一个进程便是手工启动进程。手工启动进程又可以分为前台启动和后台启动。
前台启动,这是手工启动进程最常用的方式,如用户输入“ ls –l”命令就会启动一个前台进程。当计算机在处理此命令的时候,用户不能再进行其它的操作。
后台启动,如果要让一个程序在后台运行,用户可以在输入完命令之后,在整个命令行的最后加上一个“ &”符号。此时程序将转到后台运行,其执行结果不在屏幕上显示,但在此命令的执行过程中,用户仍可以继续执行其它的操作。如:
[root@localhost ~]# ls -al > a.txt &
- 该程序运行期间不需要用户的干预。
- 该程序执行时间较长。
当 Linux系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其它操作时特别有用。
例:使用 cp命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此按Ctrl+Z组合键将该进程调入后台并暂停执行。
[root@localhost ~]# cp /dev/cdrom mycd.iso
[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命令将后台的进程任务重新调入终端的前台执行,指定后台进程对应的任务编号。
cp -i /dev/cdrom mycd.iso
再次按 Ctrl+Z组合键将该进程暂停,然后用bg命令将进程放回后台执行:
[1]+ cp -i /dev/cdrom mycd.iso &
通常终止一个前台进程可以使用 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
[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进程。
三、综合实例:踢出系统中的可疑用户
Linux是一个多用户的操作系统,在同一时间内可能会有多个用户在同时登录使用系统,下面以用户“ zhangsan”为例演示如何将可疑用户踢出系统。
首先我们要能够查看到当前有哪些用户正在登录系统,可以通过“ users”或者“who”或者是“w”命令完成这项要求。
users命令最简单,它只能列出当前登录的用户名。
[root@localhost ~]# users
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命令显示的信息最详细,可以列出用户名、终端、来源地点、登录时间、执行的命令等参数。
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系统。
然后在Linux虚拟机中执行who或w命令找到登录到系统中的可疑用户(zhangsan),并记录下其登录终端的编号(pts/5)。
查找可疑用户登录终端所对应的PID(20897):
强制结束该进程,踢出用户。
# kill -9 20897
将进程强制结束之后,所打开的putty窗口也就自动关闭了。
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1130603