Linux系统管理-进程管理

来源:互联网 发布:通化师范学院教务网络 编辑:程序博客网 时间:2024/06/05 02:04

1. 进程简介

进程就是正在运行的一个程序或命令。每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

任何程序只要在运行,就会产生至少一个进程。对于比较复杂的程序,比如apache,运行时,会产生多个进程。

命令产生的进程一般都是临时的,因为大多数命令运行的时间很短,命令结束后,进程就自动终止了。

2. 进程管理的作用

  • 查看服务器的健康状态(最主要的作用)。

    主要查看CPU的使用率、内存的占用情况。Windows系统中通过任务管理器查看计算机的健康状态。
  • 查看系统中所有的进程

    查看所有的进程(包括正常进程和异常进程)。查看它们对系统资源的占用情况。如果是进程出现了异常,就找出原因,并尽快恢复正常。如果是病毒进程,不要直接杀死,而是找到它的本体所在,根除本体。
  • 终止进程

    优先使用正常终止(关闭)进程。只有当无法正常终止进程时,才考虑使用强制终止进程的方式。

当你有多台服务器需要进行管理时 ,可以考虑搭建监控服务器。监控服务器的好处是功能更强大,管理效率更高。但它操作起来远比Linux本身的管理命令复杂。

2.1 查看系统中的所有进程

查看进程的命令为ps。最常见的用法为 ps aux

其中,a代表前台进程,x代表后台进程,u代表进程的发起者。

ps aux查看系统中所有的进程,使用BSD(Unix)操作系统格式。说明:由于使用的是Unix格式,所以aux前不能加短横线;否则,输出结果的第一行会有报错信息,但几乎没有影响。

上述命令的部分输出信息,如下:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.0  0.1   2904  1416 ?        Ss   Jan31   0:01 /sbin/initroot         2  0.0  0.0      0     0 ?        S    Jan31   0:00 [kthreadd]root         3  0.0  0.0      0     0 ?        S    Jan31   0:00 [migration/0]···root      1140  0.0  0.1   7188  1312 ?        Ss   Jan31   0:02 crondroot      1153  0.0  0.1   3988  1988 ?        Ss   Jan31   0:00 login -- root     root      1155  0.0  0.0   2012   500 tty2     Ss+  Jan31   0:00 /sbin/mingetty /dev/tty2root      1157  0.0  0.0   2012   496 tty3     Ss+  Jan31   0:00 /sbin/mingetty /dev/tty3root      1159  0.0  0.0   2012   500 tty4     Ss+  Jan31   0:00 /sbin/mingetty /dev/tty4root      1161  0.0  0.0   2012   504 tty5     Ss+  Jan31   0:00 /sbin/mingetty /dev/tty5root      1168  0.0  0.0   2012   500 tty6     Ss+  Jan31   0:00 /sbin/mingetty /dev/tty6root      1169  0.0  0.1   3364  1812 ?        S<   Jan31   0:00 /sbin/udevd -droot      1170  0.0  0.1   3364  1812 ?        S<   Jan31   0:00 /sbin/udevd -droot      2110  0.0  0.3  22740  3092 ?        Sl   Jan31   0:00 /usr/sbin/console-kit-daemon --no-daemonroot      2177  0.0  0.1   8020  1736 tty1     Ss+  Jan31   0:00 -bashpostfix   4287  0.0  0.2  13080  2928 ?        S    16:23   0:00 pickup -l -t fifo -uroot      4320  0.0  0.3  12956  3772 ?        Ss   16:48   0:00 sshd: root@pts/0 root      4324  0.0  0.1   6876  1716 pts/0    Ss   16:48   0:00 -bashroot      4351  0.0  0.3  11400  3344 ?        Ss   16:50   0:00 /usr/sbin/httpdapache    4353  0.0  0.2  11400  2188 ?        S    16:50   0:00 /usr/sbin/httpdapache    4354  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdapache    4355  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdapache    4356  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdapache    4357  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdapache    4358  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdapache    4359  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdapache    4360  0.0  0.2  11400  2160 ?        S    16:50   0:00 /usr/sbin/httpdroot      4405  2.0  0.1   6552  1064 pts/0    R+   17:03   0:00 ps aux

共有11列,分别是USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND 。说明如下:

  • USER:进程的发起者,也就是进程是由哪个用户产生的。
  • PID:进程的id,也称作进程号。
  • %CPU:进程占用的CPU资源的百分比。
  • %MEM:进程占用的物理内存的百分比。
  • VSZ:进程占用的虚拟内存的大小,单位KB。
  • RSS:进程占用的实际物理内存的大小,单位KB。
  • TTY:进程是在哪个终端中运行的。其中tty1到tty7代表本地控制台终端,tty1到tty6是本地的字符界面终端,tty7是本地的图形界面终端。pts/0-255代表虚拟终端(即远程登录终端)。
  • STAT:进程的状态。
  • START:进程是在什么时间启动的。
  • TIME:进程占用CPU的运算时间,值越大,越耗费资源。
  • COMMAND:产生进程的命令,也就是进程的全名。

每一行代表一个进程。PID为1的进程是init,它是系统启动的第一个进程,是所有其他进程的父进程。

按住Alt + F1到F6,能够进行本地字符界面终端的切换;如果装了图形界面,可按住Ctrl + Alt + F7,切换到本地图形界面终端(Linux有6个本地字符界面终端,1个本地图形界面终端)。

常见的进程状态有:R 正在运行;S 睡眠状态;T 停止状态;s 包含子进程;+ 位于后台。

ps -le      查看系统中所有的进程,使用Linux标准命令格式。-l代表显示进程的详细信息,-e代表显示所有进程。它和ps aux的输出结果差不多,只不过没有ps aux显示的直观易懂。故用得较少。

说明:查看系统中所有的进程的命令主要是ps aux。

这里,讲一个查看进程树的pstree命令

格式:pstree [选项]

作用:查看进程树。

选项:

-p  显示所有进程(主进程和子进程)的PID(进程号)。-u  显示进程的所属用户。

常见用法:

[root@localhost ~]# pstreeinit─┬─auditd───{auditd}     ├─console-kit-dae───63*[{console-kit-da}]     ├─crond     ├─dbus-daemon───{dbus-daemon}     ├─dhclient     ├─httpd───8*[httpd]     ├─login───bash     ├─master─┬─pickup     │        └─qmgr     ├─5*[mingetty]     ├─rsyslogd───3*[{rsyslogd}]     ├─sshd───sshd───bash───pstree     └─udevd───2*[udevd]

如上,init进程是所有进程的父进程;同时,对于apache的进程(httpd),有1个主进程和8个子进程。

如果想看到更为详细的进程树信息,可以用:

pstree -p查看所有进程的进程号。

2.2 查看服务器的健康状态

命令格式:top [选项]

选项:

  • -d 秒数:指定top命令每隔几秒更新一次。默认是3秒。

在top命令的交互模式中,可以执行的命令主要有:

? 或 h       显示交互模式的帮助信息。P       以CPU占用率排序,默认排序。M       以内存的占用率排序。N       以进程的PID排序。R       切换降序排列和升序排序。默认降序。q       退出。或者用Ctrl+C

常见用法:

top查看系统的健康状态。会进入交互模式。

交互模式的部分内容如下:

top - 18:30:29 up 1 day,  1:45,  2 users,  load average: 0.00, 0.00, 0.00Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombieCpu(s):  0.3%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%stMem:   1030488k total,   237004k used,   793484k free,    30844k buffersSwap:  1048572k total,        0k used,  1048572k free,   138176k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   4527 root      20   0  2676 1120  888 R  0.3  0.1   0:00.61 top         1 root      20   0  2904 1416 1208 S  0.0  0.1   0:01.56 init                                                 2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd        3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                     

top命令最重要的输出信息在前五行。

第一行是任务队列信息。

top - 18:30:29 up 1 day, 1:45, 2 users, load average: 0.00, 0.00, 0.00

内容 说明 18:30:29 系统当前的时间。 up 1 day, 1:45 系统的运行时间。本机已连续运行1天1小时45分钟。 2 users 当前登录了2个用户(包括本地登录和远程登录)。 load average: 0.00, 0.00, 0.00 系统在1分钟、5分钟、15分钟之前的平均负载。对于单核服务器,平均负载小于1时,说明负载较小;如果大于1,说明系统已超出负荷。(四核就以4为标准。)

第二行是进程信息。

Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie

内容 说明 87 total 系统的进程总数。 1 running 正在运行的进程数。 86 sleeping 睡眠的进程数。 0 stopped 正在停止的进程数。 0 zombie 僵尸进程数。如果不是0,需要手工检查僵尸进程。

僵尸进程是指进程正在终止,但还没有终止完全。过一会儿再查看,如果终止完全了就没事;否则,需要手工将其终止。

第三行是CPU信息。

Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st

内容 说明 0.3%us 用户占用的CPU百分比。 0.0%sy 系统占用的CPU百分比。 0.0%ni 改变过优先级的用户进程占用的CPU百分比。 99.3%id 空闲CPU的百分比。(最重要) 0.0%wa 等待输入/输出的进程占用的CPU百分比。 0.0%hi 硬中断请求服务占用的CPU百分比。 0.3%si 软中断请求服务占用的CPU百分比。 0.0%st steal time 虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。

第四行是物理内存信息。

Mem: 1030488k total, 237004k used, 793484k free, 30844k buffers

内容 说明 1030488k total 物理内存的总大小,单位KB。 237004k used 已使用的物理内存大小。 793484k free 空闲的物理内存大小。(最重要) 30844k buffers 作为缓冲的内存大小。

第五行是交换分区(swap)信息。

Swap: 1048572k total, 0k used, 1048572k free, 138176k cached

内容 说明 1048572k total 交换分区(虚拟内存)的总大小,单位KB。 0k used 已使用的交换分区的大小。 1048572k free 空闲的交换分区的大小。 138176k cached 作为缓存的交换分区的大小。

对于前五行信息,最主要进行查看的指标有三个:

  • 服务器的平均负载
  • CPU的空闲率
  • 内存(物理内存)的空闲大小

对于第七行及后面的行,它和ps aux的输出结果类似。

注意: top命令本身就比较耗费系统资源,没事的话,就应该退出top交互模式。同样,Windows的任务管理器也比较耗费系统资源。

2.3 终止进程

2.3.1 kill 命令
kill -l         查看所有可用的进程信号。
[root@localhost ~]# kill -l 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+338) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+843) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-758) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-263) SIGRTMAX-1  64) SIGRTMAX    

如上,共有64个可用的信号。常用的有下面几个:

信号代号 信号的名称 说明 1 SIGHUP 平滑重启。先终止进程,然后重新读取配置文件后启动程序。 2 SIGINT 终止前台进程。相当于Ctrl+C快捷键。 8 SIGFPE 在产生致命的算术错误时发出,包括浮点运算错误、溢出、除数为0等算术错误。 9 SIGKILL 强制终止进程。立即强制终止进程,本信号不能被阻塞、处理和忽略。 14 SIGALRM 时钟定时信号,计算的是实际的时间或时钟时间,alarm函数使用该信号。 15 SIGTERM 正常终止进程。kill命令的默认信号。如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL信号。 18 SIGCONT 恢复进程。让暂停的进程恢复运行,它不能被阻断。 19 SIGSTOP 暂停前台进程。相当于输入Ctrl+Z快捷键。它不能被阻断。

命令格式: kill [-信号] 进程的PID

作用:主要是按照进程号终止某个进程。

实际上,kill命令可以对一个进程进行正常终止、强制终止、暂停、恢复、重启等操作。

说明:使用信号的代号或者信号的名称都行。

kill 命令的默认信号是SIGTERM(15),表示正常终止进程。

示例,以apache的进程为例,已知它的主进程的PID是4351。

kill 4351正常关闭apache。等同于 kill -15 4351kill -SIGTERM 5351kill -1 4351  重启apache。等同于 kill -SIGHUP 4351kill -9 4351强制关闭apache。此命令最好少用,一般只在进程无法正常终止的情况下使用。

注意:进程号并不是固定不变的,当系统重启后,进程号会发生变化。

说明:程序运行时,可能产生多个进程。比如apache运行时,会产生一个主进程httpd和多个子进程httpd,它们的进程号各不相同。想要关闭apache,需要终止主进程。

2.3.2 killall 命令

命令格式:killall [-信号] [选项] 进程名

作用:按照进程名终止一类进程。

选项:

-i  交互式,会询问是否要杀死某个进程。默认不询问。-I  忽略进程名的大小写。

killall命令中信号的使用方式和kill命令中信号的使用方式相同。

示例:关闭apache。

killall httpd正常关闭apache。killall -15 httpd正常关闭apache。killall -1 httpd重启apache。(前提是apache已经运行,否则进程就不存在。)killall -9 httpd强制关闭apache。此命令最好少用,只有当进程无法正常终止时,才考虑使用强制终止。
2.3.3 pkill命令

命令格式:pkill [-信号] [选项] 进程名

作用:按照进程名终止一类进程(这和killall一样),或者,按照终端号踢出用户。

选项:

-t:按照终端号踢出用户。

示例:关闭apache。

pkill httpd正常关闭apache。pkill -15 httpd正常关闭apache。pkill -1 httpd重启apache。(前提是apache已经运行,否则进程就不存在。)pkill -9 httpd强制关闭apache。此命令最好少用,只有当进程无法正常终止时,才考虑使用强制终止。

示例:按照终端号踢出用户。

可用w命令,查看系统中已经登录的用户。

[root@localhost ~]# w 22:39:05 up 1 day,  5:54,  3 users,  load average: 0.00, 0.00, 0.00USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHATroot     tty1     -                Tue21    3:56m  0.05s  0.05s -bashroot     pts/0    192.168.200.1    16:48    3:19   0.24s  0.24s -bashroot     pts/1    192.168.200.1    22:34    0.00s  0.04s  0.00s w

再来踢出用户。

pkill -9 -t pts/1强制杀死从pts/1终端登录的进程,也就是强制踢出该用户。等同于 pkill -SIGKILL -t pts/1
原创粉丝点击