进程任务管理

一.   查看和控制进程

        程序是保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行的计算机程序。在Linux操作系统中,每个程序启动后可以创建一个或多个进程。列如,提供Web服务的httpd程序,当有大量用户同时访问Web页面时,httpd程序可能会创建多个进程来提供服务。

1.  查看进程

        了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的角度查看进程状态。下面是几个常用的进程查看命令,命令执行结果仅供参考,因环境变量不同执行结果有差异。

        ps命令——查看静态的进程统计信息

        ps 命令是 Linux 操作系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照。通过不同的命令选项,可以有选择性地查看进程信息

  •  a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息
  • u:使用以用户为主的格式输出进程信息
  • x:显示当前用户在所有终端下的进程信息。
  • -e:显示系统内的所有进程信息。
  • -l:使用长(Long)格式显示进程信息。
  • -f:使用完整的(Ful)格式显示进程信息
        以上列出的是 ps 命令中常用的几个选项,需要注意的是,有一部分选项是不带"-"前缀的(添加“-”前缀后含义可能会有出入)。习惯上将上述选项组合在起使用,如执行“ps aux”或“ps -elf”命令。执行如下的“ps aux”命令后,将以简单列表的形式显示出进程信息,如下图所示

ps aux命令执行结果

上述输出信息中,第一行为列表标题,其中各字段的含义描述如下。

  • USER:启动该进程的用户账号的名称。
  • PID:该进程在系统中的数字ID号,在当前系统中是唯一的。
  • %CPU:CPU 占用的百分比。
  • %MEM:内存占用的百分比。
  • VSZ:占用虚拟内存(swap 空间)的大小。
  • RSS:占用常驻内存(物理内存)的大小。
  • TTY:表明该进程在哪个终端上运行。“?"表示未知或不需要终端。
  • STAT:显示进程当前的状态,如 S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、十(前台进程)。对处于僵死状态的进程应该予以手动终止。
  • START:启动该进程的时间。
  • TIME:该进程占用的 CPU 时间。
  • COMMAND:启动该进程的命令的名称。
若执行如下的“ps -elf"命令,则将以长格式显示系统中的进程信息,并且包含更丰富的内容。例如,输出信息中还包括 PPID 列(表示对应进程的父进程的 PID 号),如下图所示

ps -elf命令执行结果

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

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

top命令执行结果
      上述输出信息中,开头的部分显示了系统任务(Tasks)、CPU 占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
  • 系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
  • CPU 占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,1/0等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分。
  • 内存占用(Mem)信息:total,总内存空间:free,空闲内存;used,已用内存;buff/cache,物理内存和交换内存的缓冲区总和。
  • 交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换空间;avail Mem,可用物理空间

        例如,从上述“Tasks……”部分的信息可得知当前共有 207 个进程,其中正在运行的 1个休眠状态的 206个,停止和僵死状态的 0个。
        在 top 命令的全屏操作界面中,可以按P键根据 CPU 占用情况对进程列表进行排序,或按 M 键根据内存占用情况进行排序,按 N键根据启动时间进行排序,按h键可以获得 top程序的在线帮助信息,按q键可以正常地退出 top 程序。
        若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按k键,然后在列表上方将会出现“PID to signal/kill [default pid= 3180]:的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键,出现“Send pid 5597 signal15/sigtemm]"的二次确认的提示信息,然后按 Enter 键确认即可终止对应的进程。

 3.pgrep命令——查询进程信息

        当使用 ps 命令查询某个进程的 PID 信息时,往往需要结合 grep 命令对输出结果进行过滤,但这样使用非常不方便,而 pgrep 命令正是查询特定进程信息的专用工具。使用 pgrep命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID 号。

        通过 pgrep 命令,可以只指定进程的一部分名称进行查询,结合“-!”选项可同时输出对应的进程名(否则只输出 PID 号,不便于理解)。例如,若要查询进程名中包含“og”的进程及其 PID 号,可以执行以下操作。

4.pstree命令——查看进程树 

        pstree 命令可以输出 Linux 操作系统中各进程的树形结构,以更加直观地判断各进程之间的相互关系(父进程、子进程)。pstree 命令默认情况下只显示各进程的名称,结合“-p”选项使用时可以同时列出对应的 PID 号,结合“-u"选项可以列出对应的用户名,结合“-a”选项可以列出完整的命令信息。
        例如,执行如下的“pstree -aup"命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”。

二. 控制进程 

        1.启动进程

        在 Linux 操作系统中,可以由用户手工启动或者按预订计划调度启动新的进程。

(1)手工启动进程

        由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。
        进程在前台运行(如执行“Is-"命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。
        启动后台进程需要使用“&”操作符,将“&"操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&”符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作,代码如下:

 

         (2)调度启动进程
        在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划任务进程均在后台运行,不会占用用户的命令终端。
        进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。
        2.改变进程的运行方式
        (1)挂起当前的进程
当 Linux 操作系统中的命令正在前台执行时(运行尚未结束),按 Ctr+Z 组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,在使用 wget 命令下载 Firefox 软件包时,发现下载速度缓慢,为了不耽误其他操作,可以按 Ctr+Z组合键将该下载任务调入后台并暂停执行,代码如下:

         (2)查看后台的进程
        需要查看当前终端中在后台运行的进程任务时,可以使用jobs 命令,结合“-!"选项可以同时显示该进程对应的 PID 号。在 jobs 命令的输出结果中,每一行记录对应一个后台进程的状态信息,行首的数字表示该进程在后台的任务编号。若当前终端没有后台进程,将不会显示任何信息。例如,执行如下的“jobs -"命令可以看到前面挂起的 wget 下载任务的相关信息。

        (3)将后台的进程恢复运行
        使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按Ct+Z组合键挂起)的任务恢复运行,继续在后台执行操作;而使用fg命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。
        除非后台中的任务只有一个,否则bg 和fg命令都需要指定后台进程的任务编号作为参数。例如,执行如下的“g 1”命令可以将之前挂起至后台的 wget 进程重新调入前台执行。

 3.终止进程执行

        当用户在前台执行某个进程时,可以按 Ctr+C 组合键强制进行中断(如命令长时间没有响应的情况下)。中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按 Ctr1+C组合键无法终止程序或者需要结束在其他终端或后台运行的进程时,可以使用专用的进程终止工具 kil、killall 和 pkil。
        (1)使用 kil 命令终止进程
        通过 ki 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kil 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9”选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。
        例如,若 SSH 服务的 sshd 进程的 PID 号为 5822,则执行“kil 5822”命令后可以将进程 sshd 终止,具体操作如下:

 (2)使用 killall 命令终止进程

        使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killal 命令将更加方便,效率更高。killa 命令同样也有"-9"选项。例如,执行如下的“killall -9 vim”命令可将所有名为 vim 的进程都强行终止。

 (3)使用 pkil 命令终止进程

        使用 pkil 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端)等选项,使用起来非常方便。例如,若要终止由用户 hackli 启动的进程(包括登录 Shel),可以执行以下操作。

  • 51
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H-J-L

求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值