Linux随笔05

第5章 进程管理

  进程的含义为正在运行的程序,包括这个运行的程序所占用的系统资源。进程是具有一定独立功能的程序关于某个数据集合的一次运动活动,是系统进行资源分配和调度的一个独立单位。同一个程序,同一时刻被两次运行,它们就是两个独立的进程。

5.1 初始进程

  在使用passwd命令时,系统将执行/usr/bin/passwd这个程序文件,同时会产生一个进程

  /usr/bin/passwd程序文件会占用少量的硬盘来存储空间,并且不会占用系统的四大核心资源Disk IO、Memory、CPU、Network。如果用户执行了该程序文件,系统将会产生一个passwd进程。

 

  进程是已启动的可执行程序的运行实例

  进程的组成部分:

  (1)已分配内存的地址空间;

  (2)安全属性,包括所有权凭据和特权  

  (3)程序代码的一个或多个执行线程;

  (4)进程状态

  每个进程都有唯一的进程标识PID,一个PID只能标识一个进程,PPID为父进程ID,需要给该进程分配系统资源。

 

  进程状态:指程序执行过程中的变化。进程状态随着程序的执行和外界条件的变化而转换。一般分为:就绪态、运行态、阻塞态。

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

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

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

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

 

 

5.2 查看进程

  5.2.1 静态查看进程:

  ps命令可以查看静态进程,仅仅是捕获某一个瞬间某一个进程的状态,类似于给进程制作快照。

  使用ps aux命令查看当前目录的进程,包括进程的PID(进程ID)、进程名称、占用CPU时间、内存使用情况等

aux                            功能
a 显示终端上的所有进程,包括其他用户的进程
u 表示列出进程的用户
x 显示所有终端的进程

 

  当TTY为“ ?”时表示不依赖任何终端运行

  基本权限意义:

列名 说明
USER 运行进程的用户
PID 进程ID
%CPU CPU占有率
%MEM 内存占用率
VSZ 占用虚拟内存
RSS 占用实际内存
TTY 进程运行的终端
STAT 进程状态
TIME 进程累计占用CPU时间
COMMAND 进程发起者

 

  ps aux --sort -%cpu命令:用于查看系统中运行的进程,按照CPU占有百分比的降序排序

 

  ps-ef命令:查看UID、PID、PPID等信息。它结合了两个命令:ps 和 grep。ps 命令用于显示进程信息,而 grep 命令用于过滤结果。在这个组合命令中,ps -ef 用于在 ps 命令的结果中搜索与指定关键词匹配的进程。

 

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

  ps aox命令:用来查看系统中所有进程的详细信息,如进程ID、用户、占用资源等。

 

 

  查看指定进程PID的方法:

 (1)使用cat命令

 (2)使用pidof命令

  (3)使用pgrep命令

 

 

  5.2.2 动态查看进程:

  top命令可以实时动态地显示进程,类似于Windows系统中的任务管理器。使用top命令动态查看进程时,进程信息分为上下两部分,上面为整体信息,下面为每一个进程的信息。

   如图所示:

  Tasks:230 total:进程个数

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

  229 sleepi:进程休眠个数

  0 stopped:进程停止个数

  0 zombie:进程僵死个数

 

  按M键以内存占用率排序

 

  按P键以CPU占有率排序

 

  按N键以PID数值大小排序

 

  按R键对排序进行反转

 

   按F键显示自定义显示字段。按上下键移动。按空格键选中。按q键退出自定义显示字段。按W键保存自定义显示字段

 

  按1键显示所有CPU的负载

 

  top -d可以设置刷新时间,以秒为单位

 

  top -p可以指定查看一个或多个进程的动态信息

 

  top -u可以查看用户的进程

  top -n可以设置刷新次数,完成后自动退出

 

 

5.3 信号控制进程 

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

  5.3.1 kill命令

  Linux中的kill命令用来终止指定进程的运行。首先使用ps/pidof/top等工具获取进程PID,然后使用kill命令来杀死该进程。kill命令通过向进程发送指定的信号来结束相应的进程。

  kill -l命令查看全部信号

 

  常见的信号:

信号编号 名称 特性及意义
1 SIGHUP 启动被终止的进程,重新加载,PID不会发生变化
9 SIGKILL 强制终止进程,使用此信号可能导致进程无法再次启动
15 SIGTERM 默认信号,以正常流程终止进程,允许进程释放资源。若进程已出现问题无响应,此信号将不起作用
18 SIGCONT 恢复进程
19 SIGSTOP 暂停进程

  

  使用pidof命令查看vsftpd服务进程PID,然后测试信号SIGHUP。

  eg. vsftpd配置文件发生改变,希望重新加载

[root@localhost suli]# pidof vsftpd
[root@localhost suli]# kill -1 vsftpd
[root@localhost suli]# pidof vsftpd

 

  测试信号SIGTERM,该信号为默认信号,可省略输入15编号,服务器进程停止。一般情况下,程序会自带终止服务。

  eg. vsftpd服务停止脚本为“systemctl stop vsftpd”

[root@localhost suli]# kill 11847
[root@localhost suli]# pidof vsftpd

 

  tty命令:重新开启终端

 

 

   5.3.2 killall命令

  killall命令可以用于终止某个指定名称的服务所对应的全部进行

  eg. 使用killall命令终止所有的vsftpd服务进程

[root@localhost suli]# killall vsftpd
[root@localhost suli]# pidof vsftpd

 

 

5.4 进程优先级

  进程优先级是一个数值,动态的优先级和静态的优先级决定了进程被CPU处理的顺序。一个拥有更高进程优先级的进程被CPU处理的概率更高。   每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux系统能够运行的进(和线数)可以超出实际可用的CPU及其核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而造成多个进程在同时运行的假象。   

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

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

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

 

 

5.5 作业控制

 

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

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

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

  jobs命令用于显示当前Shell中的作业列表及作业状态,包括后台运行的任务,该命令可以显示作业ID

  bg命令可以把任务移动至后台

  fg命令可以将后台进程移动到前台,进程会占用终端,既可以使用键盘读取或写入。使用fg命令时不添加任何作业号,则默认调用最近的一个进程

 

posted @ 2023-11-26 16:09  苏梨  阅读(13)  评论(0)    收藏  举报