第五章 进程管理

一、初识进程

       前面提到过passwd命令,在使用该命令时,系统将执行/usr/bin/passwd这个程序文件,同时会产生一个进程。/usr/bin/passwd程序文件会占用少量的硬盘存储空间,并且不会占用系统的四大核心资源Disk IO、Memory、CPU、Network。如果用户alice执行了该程序文件,系统将会产生一个passwd进程。

进程是已启动的可执行程序的运行实例。进程有以下组成部分。

  •  已分配内存的地址空间。
  • ·安全属性,包括所有权凭据和特权。
  • ·程序代码的一个或多个执行线程。
  • 进程状态。

       每个进程都有唯一的进程标识PID,一个PID只能标识一个进程,PPID为父进程ID,需要给该进程分配系统资源。进程状态是指程序执行过程中的变化。进程状态随着程序的执行和外界条件的变化而转换,一般分为3类:就绪态、运行态、阻塞态,如图5.1所示。

就绪态:进程已经具备运行条件,但是CPU还没有分配过来。

运行态:进程占用CPU,并在CPU上运行。

阻塞态:进程因等待某件事发生而暂时不能运行。

 不同的进程对系统资源的需求是不一样的,有些进程属于IO密集型,有些进程属于CPU密集型,等等。

二、查看进程

2.1 静态查看进程

ps命令可以查看静态进程,仅仅是捕捉某一个瞬间某一个进程的状态,类似于给进程制作快照。使用“ps aux”命令查看当前目录的进程,具体如下所示。

 每列显示的数据代表的意义如表所示。

 其中,VSZ与RSS可以简单理解为房子的建筑面积与使用面积;当TTY为“?”时,表示不依赖任何终端运行。

用户在查看CUP占用率时,一般会希望进程按照CPU占用百分比的降序排列,此时可以使用“ps aux --sort -%cpu”命令,具体如下所示。

 “ps -ef”命令可以查看UID、PID、PPID等信息,具体如下所示。

 一般情况下,并不是所有显示的内容都有意义,为了快速查找,需要显示的内容简洁并有针对性,用户可以使用“ps axo”命令自定义显示的字段,具体如下所示。

 最后,介绍几种常用的查看指定进程PID的方法,具体如下所示。

(1)使用cat命令。

(2)使用pidof命令。

(3)使用pgrep命令。

2.2 动态查看进程

top命令可以实时动态地显示进程,类似于Windows系统中的任务管理器。使用top命令动态查看进程时,进程信息分为上下两部分,上面为整体信息,下面为每一个进程的信息。系统默认更新时间为3秒,也可以按回车键立即更新,具体如下所示。

 Tasks: 进程个数。

1 running:正在使用CPU的进程个数。

sleeping:进程休眠个数。

0 stopped:进程停止个数。

0 zombie:进程僵死个数。

%Cpu(s): 16.8 us, 3.4 sy, 0.0 ni, 79.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0:CUP使用情况。KiB Mem : 1867024 total, 604692 free, 689484 used, 572848 buff/cache:内存使用情况。KiB Swap: 2097148 total, 2097148 free, 0 used:交换分区使用情况。

下半部分,按M键以内存占用率排序,具体如下所示。

 按P键以CPU占用率排序,具体如下所示。

 按N键以PID数值大小排序,具体如下所示。

 添加“-p”参数可以指定查看一个或多个进程的动态信息,如查看PID为10636与1的进程信息,具体如下所示。

三、信号控制进程

在进程运行过程中,若由于某些原因需要终止该进程,用户可以给予该进程一个信号(signal),进程接收到信号之后,就会依照信号的要求做出相应的反应。

3.1 kill命令

 Linux中的kill命令用来终止指定进程的运行。首先使用ps/pidof/top等工具获取进程PID,然后使用kill命令来杀死该进程。kill命令通过向进程发送指定的信号来结束相应的进程,在默认情况下,采用编号为15的TERM信号。使用“kill -l”命令查看全部信号。

  • kill:用于结束指定的进程。

  • 常见的信号

 

3.2 killall命令

 killall命令可以用于终止某个指定名称的服务所对应的全部进程,例如,使用killall命令终止所有的vsftpd服务进程。

四、进程优先级

       进程优先级是一个数值,动态的优先级和静态的优先级决定了进程被CPU处理的顺序。一个拥有更高进程优先级的进程被CPU处理的概率更高。

       每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux系统能够运行的进程(和线程数)可以超出实际可用的CPU及其核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而造成多个进程在同时运行的假象。

       由于不是每个进程都同样重要,可以让进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为 SCHED_OTHER (也称为SCHED_NORMAL),但还有其他一些调度策略用于不同的目的。

       SCHED_OTHER 调度策略使用的进程的相对优先级称为进程的 nice 值,有40个不同级别,其范围为−20~19,数值越小优先级越高,数值越大优先级越低。例如,−20的优先级最高,该进程不倾向于让出CPU;19的优先级最低,该进程容易将CPU 让给其他进程。

       此处需要注意的是,普通用户调整应用程序优先权值的范围为0~19,只有超级用户有权使用更高的优先权值。

4.1 使用top命令查看nice级别

 使用top命令可以查看nice级别,其中,NI列表示实际nice级别,PR列将nice级别映射到更大优先级队列,−20映射到0,+19映射到39。

 

4.2 使用ps命令查看nice级别

使用ps命令显示当前系统中所有的进程: 使用ps命令查看nice级别,其中,TS 表示该进程使用的调度策略为SCHED_OTHER。

五、作业控制

        作业控制是一个命令行功能,允许一个Shell 实例运行和管理多个命令。如果没有作业控制,父进程fork( )一个子进程后将休眠,直到子进程退出。使用作业控制可以选择性暂停、恢复以及异步运行命令,让 Shell 可以在子进程运行期间返回接受其他命令。

foreground:前台进程是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。

例如,创建一个sleep进程,在前台运行时可以按ctrl+c组合键停止,具体如下所示。

 background:后台进程没有控制终端,不需要终端的交互。

例如,在后台创建sleep进程,使用ctrl+c组合键并不能结束该进程,其中“&”为后台符,具体如下所示。

 创建两个sleep进程,sleep 7000在后台运行,sleep 8000在前台运行,在前台运行的进程,可使用ctrl+z组合键暂停,具体如下所示。

六、实例:管理远程主机

        Screen是一款用于会话终端切换的多重视窗管理软件。用户可以通过该软件同时连接多个本地或远程主机。当远程连接一台主机时,如果出现连接非正常中断,只要Screen没有终止运行,再次登录到主机上执行“screen -r”命令,就可以恢复此前在其内部运行的会话。

七、总结

      本章主要学习了进程的概念、进程的状态,进程是操作系统中正在执行的程序的实例。它是计算机系统中的一个基本概念,用于管理和调度系统资源。进程可以处于不同的状态,包括运行、就绪、阻塞和终止状态。通过使用ps和top命令,用户可以查看当前系统中正在运行的进程的详细信息,例如进程ID、CPU使用率、内存占用等。用户可以通过给予进程信号的方式对进程进行控制,进程控制不仅限于观察和监控,还包括对进程进行控制的能力。用户可以通过发送信号的方式与进程进行交互和控制。信号是一种软件中断,用于通知进程发生了某种事件。用户可以向进程发送不同类型的信号,如终止进程、暂停进程、恢复进程等,以实现对进程的控制和管理。最后主要了解了作业控制的基本原理。作业控制是操作系统中的一个重要概念,用于管理和调度用户提交的作业。作业可以包含一个或多个进程,作为一个整体进行管理。作业控制的基本原理是通过调度算法来决定作业的执行顺序和资源分配。作业控制可以提高系统的效率和性能,确保作业按照合理的顺序执行,并合理利用系统资源。

 

posted @ 2023-11-05 22:47  Wybzyx  阅读(28)  评论(0)    收藏  举报