Linux 系统管理之进程管理:目的、方法、命令

来源:互联网 发布:淘宝高仿鞋哪些店铺 编辑:程序博客网 时间:2024/05/29 17:59

文章概要

本文主要介绍了Linux 系统管理的目的,还有常见系统信息查看的命令,ps 、pstree和top命令,还介绍了如何杀死异常进程,其方式有杀死单个进程、杀死一组进程、以及如何将用户踢出终端(杀掉终端),文末还介绍了进程优先级的概念和修改进程优先级的两个命令 nice 和 renice。

一、简介

进程是正在执行的一个程序或命令,每一个进程都有自己的地址空间,并占用一定的系统资源。而操作系统为我们提供各种各样的服务,自然后台就会有许多进程在运行。有时候我们也会运行自己所写的程序。操作系统是通过进程控制块来管理进程的,那么我们用户该如何来管理这些进程呢?这就是进程管理要做的事情。

二、 进程管理的作用

  1. 判断服务器的状态是否正常运行(比如查看内存和CPU情况,看服务器是否负载过重)
  2. 查看系统中的进程信息(比如查看进程是否在运行以及某项服务是否已启动或占用很多资源)
  3. 杀死进程(杀死一些失去控制的进程)

三、进程查看 ps 命令和 pstree 命令

ps 命令

1. ps 命令简介与常用选项

ps - report a snapshot of the current processes.

报告当前进程信息的快照,主要用来查看进程信息。

[Jack@ www ~]$ ps aux# 查看系统中所有进程,BSD操作系统分格[Jack@ www ~]$ ps -le#查看系统中所有进程,使用Linux标准命令格式

选项说明:

  1. a:显示一个终端的所有进程,除了会话首进程和与终端无关联的进程
  2. u:显示进程的所属用户及内存的使用情况
  3. x:显示没有控制终端的进程
  4. -l:长格式显示。显示更详细的信息
  5. -e:显示所有进程与 -A一致

2. ps 命令输出信息说明

这里写图片描述

  1. USER :该进程由那个用户产生的
  2. PID:该进程的进程号
  3. %CPU:该进程占用的CPU 资源百分比,越高表示越耗费资源
  4. %MEM:该进程占用物理内存的百分比,越高表示越耗费资源
  5. VSZ:该进程占用虚拟内存的大小,单位KB
  6. RSS:该进程占用实际物理内存的大小,单位KB

  7. TTY:该进程是在哪个终端中运行的。tty1-tty7 是本地控制终端,其中tty-tty6是本地的字符界面终端,tty7是图像终端。pts/0-255代表虚拟终端(远程登录的)(内核2.6以后可以达到65535个)。问号表示该进程不受终端控制。

  8. STAT:进程状态。常见状态

    • R:运行
    • S:睡眠
    • T:停止状态
    • Z:僵尸进程
    • s:包含子进程
    • +:位于后台的进程组
      其余状态
    • D:无法中断的休眠状态(I/O进程)
    • <:优先级高的进程
    • l:多进程的
  9. START:该进程的启动时间
  10. TIME:进程占用CPU的运算时间
  11. COMMAND:产生此进程的命令名

pstree 命令

pstree - display a tree of processes# 显示进程树

选项:

  1. -p:显示进程的PID
  2. -u:显示进程所属用户

示例:

[Jack@www ~]$ pstreeinit─┬─NetworkManager─┬─dhclient     │                └─{NetworkManager}     ├─VGAuthService     ├─abrtd     ├─acpid     ├─atd     ├─auditd───{auditd}     ├─console-kit-dae───63*[{console-kit-da}]     ├─crond     ├─cupsd     ├─dbus-daemon───{dbus-daemon}     ├─hald─┬─hald-runner─┬─hald-addon-acpi     │      │             └─hald-addon-inpu     │      └─{hald}     ├─httpd───8*[httpd]     ├─login───bash     ├─master─┬─pickup     │        └─qmgr     ├─5*[mingetty]     ├─modem-manager     ├─mysqld_safe───mysqld───9*[{mysqld}]     ├─rsyslogd───3*[{rsyslogd}]     ├─sshd─┬─sshd───sshd───bash     │      └─sshd───sshd───bash───pstree     ├─udevd───2*[udevd]     ├─vmtoolsd───{vmtoolsd}     ├─vmware-vmblock-───2*[{vmware-vmblock}]     └─wpa_supplicant

四、进程查看 top 命令

1. 简介

top - display Linux tasks#显示系统任务,类似Windows 中的任务管理器,判断服务器的状态是否正常运行

演示:

top-demo


2. 选项及命令

在命令行执行时的选项

  1. -d 秒数:指定 top命令刷新间隔,默认是3秒,如输入 top -d 1 表示每隔一秒刷新一次
  2. -b:使用批处理模式输出。默认是动态更新,指定此选出后会一屏一屏连续打印。
  3. -n:指定top命令的执行次数。一般与-b选项合用。如输入 top -b -n 3 ,将会执行三次top 命令。

在没有指定-b选项时,top命令将动态更新,在此模式下有如下交互命令

  1. ?或h:显示帮助信息,按任意键返回
  2. P:以CPU使用率排序,默认就是该选项
  3. M:以内存使用率排序
  4. N:以PID排序
  5. q:退出top

3. top命令上半部分显示的信息分析

这里写图片描述

一共有五行信息,分别表示:

第一行信息为任务队列信息

top-top-1

内容 说明 20:34:50 当前系统时间 up 1:33 系统从开机到现在的运行时间,本机已运行1小时33分钟 3 users 当前登录的用户数 load average: 0.00, 0.00, 0.00 分别表示系统在1分钟之前,5分钟之前,15分钟之前的平均负载。平均负载指CPU和内存占比的平均值

第二行为进程信息

top-top-2

内容 说明 102 total 系统总的进程总数 1 running 正在运的进程数 101 sleeping 睡眠的进程数 0 stopped 被停止的进程 0 zomble 僵尸进程数。父进程没有退出并且没有回收已经退出子进程的资源,子进程就会成为僵尸进程

第三行为CPU信息

top-top-3

内容 说明 o.3%us 用户模式占用的 CPU 百分比 0.3%sy 系统模式占用的 CPU 百分比 0.0%ni 改变过优先级的用户进程占用的 CPU 百分比。ni 表示nice 值, 使用命令 ps -le 可以看到进程的优先级,负值表示优先级高,正值表示低优先级 99.3%id 空闲 CPU 的百分比 id表示单词 idle的缩写 0.0%wa 等待输入/输出的进程占用 CPU 百分比。wa 即wait 下面的几项不是很常用 0.0%hi 硬中断请求服务占用的 CPU 百分比 0.0%si 软终端请求服务占用的 CPU 百分比 0.0%st st(steal time)虚拟世界百分比。当有虚拟机时,虚拟CPU等待世界 CPU 的时间百分比

第四行为物理内存信息

top-top-4

内容 说明 1030528k total 物理内存的总量单位 KB 220676k used 已经使用的物理内存 809852k free 空闲的物理内存数量 47464k buffers 作为缓存区的内存大小,主要用来加速数据写入

第五行为交换分区(swap)信息
这里写图片描述

内容 说明 2064376k total 交换分区(虚拟内存)的总大小 0k used 已经使用的交换分区大小 2064376k free 空闲交换分区大小 83820k cached 作为缓存的交换分区大小,主要用来加速数据读取

五、杀死进程(kill,killall,pkill)

在杀死进程之前,一定要记得,你不是一个“杀手”,不能逮谁杀谁,进程大都有自己的退出方式,只有在失去控制或者无法正常终止进程的时候,才采取此终极手段,此时像一个杀手一样为“操作系统”除害。在Liuux中对进程的控制,是基于信号来实现的,可以使用kill -l 来列出系统中的信号列表:

kill-list

下面列出一些常见的与进程“性命攸关”的信号

信号代码 信号名称 说明 1 SIGHUB 让进程立即关闭,然后重新读取配置文件之后重启,也可以叫平滑启动。比如修改Apache 的配置文件后,想让其生效,又不想让当前用户掉线,就可以发送该信号。 2 SIGINT 用于终止前台进程。相当于ctrl + c 8 SIGFPE 在发发生指明的算术错误时发出,如浮点数运算错误,溢出以及除数为0 9 SIGKILL 立即终止进程,该信号不能被阻塞、捕捉和忽略 14 SIGALRM 时钟定时信号,计算的是时钟实际,函数alarm使用 15 SIGTERM 正常结束进程的信号,kill命令的默认信号。当进程退出出现异常时,这个信号无法终止,需要SIGKILL 18 SIGCONT 让暂停的进程恢复执行,不能被阻断 19 SIGSTOP 暂停前台进程,相当于ctrl+z,信号不能被阻断

注:如果想深入一些了解信号可阅读:【Linux】信号的理解以及信号集处理函数的使用


kill命令 :用来杀死单一进程

[Jack@www ~]$ kill -9z 3487[Jack@www ~]$ kill -SIGKILL 3478//都表示杀死 PID 为3478 的进程,可将-9和SIGKILL 换为其余信号

killall命令:用来杀死一组进程

[Jack@www ~]$ killall -9 httpd# 表示杀死名为httpd的所有进程killall [选项][信号] 进程名#按·`照进程名字杀死进程#选项:# -i :交互式,询问是否要杀死# -I :忽略进程名的大小写

pkill 命令:可用来杀死进程或者强制将某个用户踢出系统

[Jack@www ~]$ pkill -9 -t pts/0  # 表示将重点pts/0 上的用户踢出 # -t 表示按照终端号踢出用户# 可使用w命令查看当前系统中用户和终端[Jack@www ~]$ w 23:23:34 up  4:11,  4 users,  load average: 0.03, 0.03, 0.00USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHATroot     tty1     -                19:10    3:29m  0.18s  0.18s -bashhuozhiga pts/0    192.168.43.157   22:44   38:55   0.01s  0.01s -bashJack     pts/1    192.168.43.157   19:17    9:54   0.44s  0.44s -bashJack     pts/2    192.168.43.157   21:11    0.00s  0.37s  0.00s w[Jack@www ~]$ who am i # 使用 who am i 命令 查看自己所在终端Jack     pts/2        2017-07-07 21:11 (192.168.43.157)[Jack@www ~]$ 

六、修改进程优先级

进程优先级简述

由于 Linux是多用户多任务的操作系统,每时每刻都运行着众多的系统,而cpu 核心数是少数的,那么操作系统在分配CPU资源给进程时,就要考虑应该先分配给谁,以及分配的顺序,也就是我们常说的进程的调度,确保一些重要的进程可以第一时间得到响应。

查看进程的优先级信息

priority-nice

PRI 代表 Priority, NI 代表 Nice,都表示优先级,数值越小,优先级越高,还有以下需要注意的地方

  1. 用户不能直接修改 Priority 值,只能修改 NI 值,优先级最终值是 PRI 和 NI 的和。
  2. PRI(最终结果) = PRI(原来值) + NI
  3. NI 的范围是 [-20 到 19]
  4. 普通用户调整 NI 值的范围被限制到 [0 到 19],且只能调整属于自己的进程的 NI 值
  5. root 可以设值 NI 为负值,还可以调整任意用户的 NI 值

优先级的修改方式

通过 nice 命令:
使用命令之前需要知道:nice命令可以给新执行的程序 赋予NI 值,不能修改已经执行进程的NI 值。

#例如需要将程序 a.out 的优先级从默认PRI 值 为80执行改为85执行[Jack@www code]$ nice -n 5 ./a.out[Jack@www ~]$ ps -el | grep -E 'PID | a.out' F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD0 R   502  4013  2448 98  85   5 -   466 -      pts/1    00:02:36 ./a.out# 可以看到此时已经是85

那么如何修改已经在运行进程的有效级呢?
renice 命令:修改已经运行进程的NI值
注意:改renice命令修改时,是基于默认值80 来做运算的。

# 比如要将刚才运行的 a.out 优先级从85 修改为 81,可用下面的命令[root@www Jack]# renice 1 40134013: old priority 5, new priority 1[root@www Jack]# ps -el | grep -E 'PID | zombie' F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD0 R   502  4013  2448 99  81   1 -   466 -      pts/1    00:13:00 zombie# 可以看到此时并不是直接在 85 的基础上加1,而是在80 的基础上加1

优先级一般不需要修改,因为系统比我们更清楚应该如何调度进程。

原创粉丝点击