Linux进程管理

1、概述

无论是 Linux 系统管理员还是普通用户,监视系统进程的运行情况并适时终止一些失控的进程,是每天的例行事务。和 Linux 系统相比,进程管理在 Windows 中更加直观,它主要是使用"任务管理器"来进行进程管理的。

通常,使用"任务管理器"主要有 3 个目的:

  • 利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程;

  • 利用"性能"和"用户"标签来判断服务器的健康状态;

  • 在"应用程序"和"进程"标签中强制中止任务和进程;

2、进程管理的作用

  • 判断服务器的健康状况

    进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。这又出现了一个问题,我们发现服务器的 CPU 或内存占用率很高,该如何介入呢?是直接终止高负载的进程吗?

    当然不是,应该判断这个进程是否是正常进程,如果是正常进程,则说明你的服务器已经不能满足应用需求,你需要更好的硬件或搭建集群了;如果是非法进程占用了系统资源,则更不能直接中止进程,而要判断非法进程的来源、作用和所在位置,从而把它彻底清除。当然,如果服务器数量很少,我们完全可以人为通过进程管理命令来进行监控与干预,但如果服务器数量较多,那么人为手工监控就变得非常困难了,这时我们就需要相应的监控服务,如cactinagios

  • 查看系统中的所有进程

    我们需要查看看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务、是否有非法服务在运行。

  • 杀死进程

    这是进程管理中最不常用的手段。当需要停止服务时,会通过正确关闭命令来停止服务(如 apache 服务可以通过 service httpd stop 命令来关闭)。只有在正确终止进程的手段失效的情况下,才会考虑使用 kill 命令杀死进程。

3、进程的启动方式

  • 手工启动

    手工启动进程指的是由用户输入命令直接启动一个进程,根据所启动的进程类型和性质的不同,其又可以细分为前台启动后台启动 2 种方式。

    • 前台启动进程

      这是手工启动进程最常用的方式,因为当用户输入一个命令并运行,就已经启动了一个进程,而且是一个前台的进程,此时系统其实已经处于一个多进程的状态(实际上,系统自动时就有许多进程悄悄地在后台运行)

    • 后台启动进程

      进程直接从后台运行,用的相对较少,除非该进程非常耗时,且用户也不急着需要其运行结果的时候,例如,用户需要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个 Shell 在格式化过程中都处于“被占用”状态,从后台启动这个进程是比较明智的选择。

      从后台启动进程,其实就是在命令结尾处添加一个 & 符号(注意,& 前面有空格)。输入命令并运行之后,Shell 会提供给我们一个数字,此数字就是该进程的进程号。然后直接就会出现提示符,用户就可以继续完成其他工作
      在这里插入图片描述

  • 调度启动

    在 Linux 系统中,任务可以被配置在指定的时间、日期或者系统平均负载量低于指定值时自动启动。例如,Linux 预配置了重要系统任务的运行,以便可以使系统能够实时被更新,系统管理员也可以使用自动化的任务来定期对重要数据进行备份。

    实现调度启动进程的方法有很多,例如通过 crontab、at 等命令

4、进程相关的命令

  • 查看正在运行的进程

    通过ps命令可以查看系统中所有运行进程的详细信息。

    该命令的基本格式:

    [root@localhost ~] # ps [选项]
    

    常用选项:

    选项含义
    a显示一个终端的所有进程,除会话引线外;
    u显示进程的归属用户及内存的使用情况;
    x显示没有控制终端的进程(后台进程);
    -l长格式显示更加详细的信息;
    -e显示所有进程;
    -f完整的(Full)格式显示进程信息。

    ps 命令的帮助为了适应不同的类 UNIX 系统,可用格式非常多,不方便记忆。所以,记忆几个固定选项即可。比如:

    • ps aux” 可以查看系统中所有的进程;

      以上输出信息中各列的具体含义:

      表头含义
      USER该进程是由哪个用户产生的。
      PID进程的 ID。
      %CPU该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
      %MEM该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
      VSZ该进程占用虚拟内存的大小,单位为 KB。
      RSS该进程占用实际物理内存的大小,单位为 KB。
      TTY该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。
      STAT进程状态。常见的状态有以下几种:
      -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
      -R:该进程正在运行。
      -S:该进程处于睡眠状态,可被唤醒。
      -T:停止状态,可能是在后台暂停或进程处于除错状态。
      -W:内存交互状态(从 2.6 内核开始无效)。
      -X:死掉的进程(应该不会出现)。
      -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
      -<:高优先级(以下状态在 BSD 格式中出现)。
      -N:低优先级。
      -L:被锁入内存。
      -s:包含子进程。
      -l:多线程(小写 L)。
      -+:位于后台。
      START该进程的启动时间。
      TIME该进程占用 CPU 的运算时间,注意不是系统时间。
      COMMAND产生此进程的命令名。
    • ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;

      ps aux命令可以看到系统中所有的进程,ps -le命令也能看到系统中所有的进程。由于 “-l” 选项的作用,所以 “ps -le” 命令能够看到更加详细的信息,比如父进程的 PID、优先级等

      在这里插入图片描述

      以上输出的信息中各列的具体含义:

      表头含义
      F进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行; 4:进程使用超级用户权限;
      S进程状态。具体的状态和"ps aux"命令中的 STAT 状态一致;
      UID运行此进程的用户的 ID;
      PID进程的 ID;
      PPID父进程的 ID;
      C该进程的 CPU 使用率,单位是百分比;
      PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;
      NI进程的优先级,数值越小,该进程越早被执行;
      ADDR该进程在内存的哪个位置;
      SZ该进程占用多大内存;
      WCHAN该进程是否运行。"-"代表正在运行;
      TTY该进程由哪个终端产生;
      TIME该进程占用 CPU 的运算时间,注意不是系统时间;
      CMD产生此进程的命令名;
    • ps -l” 只能看到当前 Shell 产生的进程;

    僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。

  • 监听进程运行状态

    ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性。为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

    top 命令的基本格式如下:

    [root@localhost ~]#top [选项]
    

    选项:

    选项含义
    -d 秒数指定 top 命令每隔几秒更新。默认是 3 秒;
    -b使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
    -n 次数指定 top 命令执行的次数;
    -p 进程PID仅查看指定 ID 的进程;
    -s使 top 命令在安全模式中运行,避免在交互模式中出现错误;
    -u 用户名只监听某个用户的进程;

    在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

    • ? 或 h:显示交互模式的帮助;
    • P:按照 CPU 的使用率排序,默认就是此选项;
    • M:按照内存的使用率排序;
    • N:按照 PID 排序;
    • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
    • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
    • r:按照 PID 给某个进程重设优先级(Nice)值;
    • q:退出 top 命令;

    对输出的信息进行解释一下。top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

    1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
    2. 第二部分从第六行开始,显示的是系统中进程的信息;
    • 第一行为任务队列信息,具体内容如下表所示。

      内 容说 明
      19:36:44系统当前时间
      7:05系统的运行时间.本机己经运行 7 小时 05 分钟
      2 users当前登录了两个用户
      load average: 0.00,0.01,0.05系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)
    • 第二行为进程信息,具体内容如表 2 所示。

      内 容说 明
      Tasks: 96 total系统中的进程总数
      1 running正在运行的进程数
      95 sleeping睡眠的进程数
      0 stopped正在停止的进程数
      0 zombie僵尸进程数。如果不是 0,则需要手工检查僵尸进程
    • 第三行为 CPU 信息,具体内容如表 3 所示。

      内 容说 明
      Cpu(s): 0.0 %us用户模式占用的 CPU 百分比
      0.0%sy系统模式占用的 CPU 百分比
      0.0%ni改变过优先级的用户进程占用的 CPU 百分比
      100%id空闲 CPU 占用的 CPU 百分比
      0.0%wa等待输入/输出的进程占用的 CPU 百分比
      0.0%hi硬中断请求服务占用的 CPU 百分比
      0.0%si软中断请求服务占用的 CPU 百分比
      0.0%stst(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
    • 第四行为物理内存信息,具体内容如表 4 所示。

      内 容说 明
      Mem: 995896 total物理内存的总量,单位为KB
      122764 used己经使用的物理内存数量
      394576 free空闲的物理内存数量
      478556 buff/cache作为缓冲的内存数量
    • 第五行为交换分区(swap)信息,如表 5 所示。

      内 容说 明
      Swap: 2097148 total交换分区(虚拟内存)的总大小
      0 used已经使用的交换分区的大小
      2097148 free空闲交换分区的大小
      679448 cached作为缓存的交换分区的大小
  • 终止进程

    使用kill命令来终止进程

    基本格式如下:

    [root@localhost ~]# kill [信号] PID
    

    kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名

    常用信号:

    信号编号信号名含义
    0EXIT程序退出时收到该信息。
    2INT表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。
    3QUIT退出。
    9KILL杀死进程,即强制结束进程。
    15TERM正常结束进程,是 kill 命令的默认信号。

    也可以使用killall 关闭进程,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程

    基本格式如下:

    [root@localhost ~]# killall [选项] [信号] 进程名
    [root@localhost ~]# killall httpd				#杀死所有进程名是httpd的进程
    
  • 查看后台进程

    jobs 命令可以用来查看当前终端放入后台的工作

    基本格式如下:

    [root@localhost ~]#jobs [选项]
    

    常见选项:

    选项含义
    -l(L 的小写)列出进程的 PID 号。
    -n只列出上次发出通知后改变了状态的进程。
    -p只列出进程的 PID 号。
    -r只列出运行中的进程。
    -s只列出已停止的进程。

    当前终端有一个后台工作, top 命令,工作号为 1,状态是暂停,标志是"+“;”+“号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。”-"号代表倒数第二个放入后台的工作,而第三个以后的工作就没有"±"标志了。

  • 查看内存使用状态

    free命令用来显示系统内存状态,包括系统物理内存、虚拟内存(swap 交换分区)、共享内存和系统缓存的使用情况

    基本格式如下:

    [root@localhost ~]# free [选项]
    

    选项:

    选项含义
    -b以 Byte(字节)为单位,显示内存使用情况。
    -k以 KB 为单位,显示内存使用情况,此选项是 free 命令的默认选项。
    -m以 MB 为单位,显示内存使用情况。
    -g以 GB 为单位,显示内存使用情况。

  • 查看过去登录的用户信息

    last 命令可以查看当前和过去登陆系统用户的相关信息;

    lastlog 命令可以查看到每个系统用户最近一次登陆系统的时间。

    last 命令的基本格式:

    [root@localhost ~]# last [选项]
    

    选项:

    选项含义
    -a把从何处登陆系统的主机名或 IP 地址显示在最后一行。
    -R不显示登陆系统的主机名或 IP 地址。
    -x显示系统关机、重新开机以及执行等级的改变等信息。
    -n 显示列数设置列出信息的显示列数。
    -d将显示的 IP 地址转换成主机名称。

    在执行 last 命令时,它默认会读取 /var/log/wtmp 日志文件,这是一个二进制文件,不能直接用 vi 编辑,只能通过 last 命令调用。

    lastlog 命令默认是去读取 /var/log/lastlog 日志文件的

参考文档:http://c.biancheng.net/linux_tutorial/14/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值