Linux之程序管理


目录

1.什么是进程(Process)?

1.1.什么是程序?

         1.2.进程与程序的区别与联系

1.3.Linux是多人、多任务环境

2.工作管理 (job control)

2.1.jobs命令

3.程序的观察

4.程序的管理

4.1.kill -signal PID

4.2.killall -signal 指令名称

4.3.进程的执行顺序

Priority与 Nice 值

4.4.系统资源的观察


1.什么是进程(Process)?

  • 直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。
  • Linux的进程相互之间有一定的关系。比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构。我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程。
  • 进程是一个程序的动态运行实例
  • 一个正在执行的程序
  • 能分配处理器并由处理器执行的实体
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。
  • 进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。(进程在内存中因策略或调度需求会处于各种状态)

1.1.什么是程序?

在 Linux 系统当中:『触发任何一个事件时,系统都会将他定义成为一个程序,并且给这个程序一个 ID ,称为 PID,同时依据启动这个程序的用户与相关属性关系,给予这个 PID 一组有效的权限设定。 以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了。

1.2.进程与程序的区别与联系

  • 进程是程序的一次动态运行实例,程序是可以被保存的,而进程只是暂时的。即进程是动态的概念,程序是静态的概念
  • 程序只是文件,它是一系列代码指令的集合,而进程是程序被加载到内存,并衍生出一系列的结构体来维护

1.3.Linux是多人、多任务环境

在 Linux 底下执行一个指令时,系统会将相关癿权限、属性、程序代码与数据等均加载内存, 并给这个单元一个程序标识符 (PID),最终该指令可以进行的任务则与这个 PID 的权限有关。

  • 多人环境

在同一时间内,可以有多个用户同时登陆一个系统。

  • 多任务环境

同时可以执行多个进程,比如同时打开qq和音乐播放器。


2.工作管理 (job control)

工作管理 (job control) 是用在 bash 环境下的,当我们登入系统取得 bash shell 之后,在单一终端机接口下同时进行多个工作的行为管理 。举例来说,我们在登入 bash 后, 想要一边复制档案、一边进行资料搜寻、一边进行编译,还可以一边进行 vi 程序撰写! 当然我们可以重复登入那六个文字接口的终端机环境中,不过,能不能在一个 bash 内达成? 当然可以啊!就是使用 job
control。

命令小结:

命令小结
CTRL + C 终止一个程序的运行
CTRL + Z 暂停一个程序的运行,并把它放在后台
jobs 查看后台程序已经运行状态
bg 让后台暂停的程序,变成运行状态,例子:运行暂停态序号为1的程序,使用命令:bg 1
fg 将背景工作拿到前景来处理
指令 & 直接将指令丢到背景中『执行』
kill 管理背景当中的工作
ps aux 观察系统所有的程序数据
   
   

例子:

当我们在终端中打开一个软件,例如:firefox(火狐浏览器)

这时候我们再使用命令的时候,终端就不会响应了,因为此时前台已经firefox浏览器被占用了。

此时使用命令:CTRL + C ,终止这个firefox程序的运行,前台又可以使用了。

再次运行firefox程序,然后使用CTRL+Z,暂停这个程序的运行,前台仍然可以保留出来,但是firefox软件在后台就停止运行了,除了暂停的状态。

firefox程序无响应


 2.1.jobs命令

命令: jobs

语法:jobs [-lrs]

选项参数

选项 含义
-l 除了列出job number 与指令串之外,同时列出PID号码
-r 仅列出正在后台run的工作
-s 仅列出正在后台中停止(stop)的工作。

查看后台的程序有哪些,以及程序的状态,使用命令:jobs

解释:此处显示只有一个暂停的程序,名为firefox,序列号为1

如何激活后台停止的程序,使用命令:bg + 暂停态序列号

例如:启动一个序列号为1的程序,使用jobs命令可以看到后台的firefox程序已经处于运行态了:

现在firefox是运行在后台的,如何把它调到前台来呢,使用明明:fg + 序列号

2.2.运行一个程序的时候直接放在后台运行

在运行这个程序的时候直直接在其后面加一个“&”符号,例如,让firefox软件运行在后台,使用命令:firefox &

解释:此时前台的程序可以正常运行,后台的firefox程序也在运行

2.3.管理背景当中的工作: kill

命令:kill

语法:kill -signal %jobnumber

选项:
 

选项 含义
-l

列出目前 kill能够使用的讯号(signal)有哪些

signal:代表给予后面接的那个工作什么样的指示,使用命令man 7 signal 可查询

-1 重新读取一次参数的配置文件
-2 代表由键盘输入ctrl -c 同样的工作
-9 立刻强制删除一个动作
-15 以正常的程序方式终止一项工作,不同于-9

例子:杀掉后台jobnumber为1的那个程序。

使用命令:kill -9 %1

注意:如果上面的命令没有了这个符号"%",就代表是杀死进程PID为1的那个进程,而不是程序。

注意事项:

即使让一个程序在后台运行,但是如果后台有数据输出,这个数据还是显示在前台的屏幕上的,例子演示一下

使用命令:ping localhost & ,使这个命令在后台输出


3.程序的观察

3.1.ps 命令

功能:将某个时间点的程序运作情況截取下来

选项与参数

参数 含义
-A 所有的process均显示出来,与-e相同的效果
-a 不与terminal有关的所有process
-u 有效使用者(effective user)相关的peocess
-x 通常与a这个参数一起使用,可列出较完整的信息
输出格式规划:
l 较长、较详细的将该PID的信息列出
j 工作的格式(jobs format)
-f 做一个更为完整的输出

例子:

ps aux:观察系统所有的程序数据

ps -lA :能够观察所有系统的数据

ps axjf:连同部分程序树状态

3.2.仅观察自己的 bash 相关程序: ps -l 

各段的含义

  •   F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:

 o 若为 4 表示此程序的权限为 root ;

 o 若为 1 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。

  • S:代表这个程序的状忞 (STAT),主要的状态有:

o  R (Running):该程序正在运作中;
o  S (Sleep):开程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
o  D :不可被唤醒的睡眠状忞,通常这支程序可能在等待 I/O 的情况(ex>打印)
o  T :停止状忞(stop),可能是在工作控制(背景暂停)或除错 (traced) 状忞;
o  Z (Zombie):僵尸状忞,程序已经终止但即无法被移除至内存外。

  •  UID/PID/PPID:代表『此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码』
  •  C:代表 CPU 使用率,单位为百分比;
  •  PRI/NI:Priority/Nice 癿缩写,代表此程序被 CPU 所执行的优先级,数值越小代表该程序越快被 CPU 执行。
  •  ADDR/SZ/WCHAN:都不内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN表示目前程序是否运作中,同样癿, 若为 - 表示正在运作中。
  •  TTY:登入者的终端机位置,若为进程登录则使用动态终端接口 (pts/n);
  •  TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运作的时间,而不是系统时间;
  •  CMD: command 的缩写,触发此程序的命令。

解释:bash程序

bash 的程序属于 UID 为 0 的使用者,状态为睡眠(sleep), 所以为睡眠状态因为触发了 ps (状态为 run) 。此程序的 PID 为 15142,优先执行顸序为 80, 下达 bash 所取得的终端接口为 pts/0 ,运作状态为等待 (wait) 。


3.3.观察系统所有程序: ps aux

使用命令:ps aux

各段的含义:

  •  USER:该 process 属于那个使用者账号的
  •  PID :该 process 的程序标识符。
  • %CPU:该 process 使用掉的 CPU 资源百分比;
  •  %MEM:该 process 所占用的物理内存百分比;
  •  VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
  •  RSS :该 process 占用的固定的内存量 (Kbytes)
  •  TTY :该 process 是在哪个终端机上面运作,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网绚连接进主机的程序。
  •  STAT:该程序目前的状态,状忞显示与 ps -l 的 S 标志相同 (R/S/T/Z)
  •  START:该 process 被触发启动的时间;
  •  TIME :该 process 实际使用 CPU 运作的时间。
  •  COMMAND:该程序的实际指令为何

一般来说,ps aux命令的显示结果会按照PID的大小来显示,还是找到PID为15412哪个PID来解释一下那段数据的含义:

占用了0.5%的物理内存百分比,状态为休眠(Ss),程序的启动时间为20:58,且取得终端机环境pts/0.


3.4.脱机管理问题:nohup

要注意癿是,我们在工作管理当中提到的『背景』指的是在终端机模式下可以避克 [crtl]-c 中断的一个情境, 并不是放到系统的背景去!所以,工作管理的背景依旧与终端机有关! 在这样的情况冴下,如果你是以进程联机方式连接到你的 Linux 主机,并且将工作以 & 的方式放到背景去, 请问,在工作尚未结束的情况下你脱机了,该工作还会继续进行吗?答案是『否』!不会继续进行,而是会被中断掉。

以尝试使用 nohup 这个指令来处理喔!这个 nohup 可以使你在脱机或注销系统后,还能够使工作继续进行。

语法:

 nohup [指令与参数]       <==在终端机前景中工作

 nohup [指令与参数] &   <==在终端机背景中工作

功能:即使你关闭运行程序的控制台,这个程序仍然会运行。


3.5.动态观察程序的变化:top

相对于 ps 是撷取一个时间点的程序状态, top 则可以持续侦测程序运作的状忞!使用方式如下:

语法:

top [-d 数字] | top [-bnp]

参数

指令 含义
-d 后面可以接秒数,就是整个程序画面更新的秒数,预设是5s
-b 以批次的方式执行top,通常会搭配数据流重导向来将批次结果输出称为档案
-n 与 -b,意义是,需要进行几次top输出结果
-p 指定某个PID来进行观察检测而已

在 top 执行过程当中可以使用的按键指令:

  • ? :显示在 top 当中可以输入的按键指令;
  • P :以 CPU 的使用资源排序显示;
  • M :以 Memory 的使用资源排序显示;
  • N :以 PID 来排序!
  • T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
  • k :给予某个 PID 一个讯号 (signal)
  • r :给予某个 PID 重新制订一个 nice 值。
  • q :离开 top 软件的按键。

使用top命令可以实时查看进程的变化,默认是5s变化一次:

 

改变刷新的时间为1s

使用命令:top -d 1

现在刷新速度是1s一次。


4.程序的管理

程序之间是可以互相控制的!举例来说,你可以关闭、重新启动服务器软件,朋务器软件本身是个程序, 你既然可以使它关闭或启动,当然就是可以控制该程序啦!那么程序是如何互相管理的呢?其实是透过给予该程序一个讯号 (signal) 去告知该程序你想要它做什么!

4.1.kill -signal PID

例子:杀死ping这个进程,例如这个进程的PID是15423

使用命令:kill -9 15423

如何查看一个进程或指令的PID?

使用命令:pidof 指令

例如查看ping的pid,使用命令:pidof ping 

4.2.killall -signal 指令名称

由于 kill 后面必项要加上 PID 或者是( job number),所以,通常 kill 都会配合 ps, pstree 指令挃令,因为我们必项要找到相对应的那个程序的 ID 嘛!但是,如此一来,很麻烦~有没有可以利用『下达指令的名称』来给予这个信号的。

那么就是这条指令啦:killall -signal 指令名称

语法:

killall [-iIe] [command name]

选项

选项 含义
-i interactive 的意忠,交互式的,若需要删除时,会出现提示字符给用户
-e exact 的意思,表示『后面接的 command name 要一致』,但整个完整的指令不能超过 15 个字符
-I 指令名称(可能含参数)忽略大小写

例子:杀死ping这个进程

使用命令:killall -9 ping


4.3.进程的执行顺序

我们知道 Linux 是多人多任务的环境,由 top 的输出结果我们也发现, 系统同时间有非常多的程序在运行中,叧是绝大部分的程序都在休眠 (sleeping) 状态而已。 想一想,如果所有的程序同时被唤醒,那么 CPU 应该要先处理那个程序呢?

  • Priority与 Nice 值

由于 PRI 是核心动态调整的,我们用户也无权去干涉 PRI !那如果你想要调整程序的优先执行序时,就得要透过 Nice 值了!Nice 值就是上表的 NI 啦!一般来说, PRI 与 NI 的相关性如下:

     PRI(new) = PRI(old) + nice

注意:如果原本的 PRI 是 50 ,并不是我们给予一个 nice = 5 ,就会使 PRI 变成 55! 因为 PRI 是系统『动态』决定的,所以,虽然 nice 值是可以影响 PRI ,不过, 最终的 PRI 仍是要经过系统分析后才会决定的。另外, nice 值是有正负的喔,而既然 PRI 越小越早被执行, 所以,当nice 值为负值时,那么该程序就会降低 PRI 值,这个进程的优先级就越高。

  •  nice 值可调整的范围为 -20 ~ 19 ;
  •  root 可随意调整自己或他人程序的 Nice 值,其范围为 -20 ~ 19 ;
  •  一般用户仅可调整自己程序的 Nice 值,其范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
  •  一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5
  • nice :新执行的指令即给予新的 nice 值

语法:

nice [-n 数字] command

选项:

-n :后面接一个数值,数值癿范围 -20 ~ 19

例子:

用 root 给一个 nice 植为 -5 ,用于执行 vi ,并观察该程序!

  •   renice :已存在程序的 nice 重新调整

语法:

renice [number] PID

选项:PID :某个程序的 ID 

例子:

找出自己的 bash PID ,并将该 PID 的 nice 调整到 10

同样可以使用top命令里面使用指令去修改。


4.4.系统资源的观察

  • free :观察内存使用情况

语法:

free [-b|-k|-m|-g] [-t]

选项与参数

选项 含义
-b 直接输入 free 时,显示的单位是 Kbytes,我们可以使b(bytes),m(Mbytes)、k(Kbytes), 及 g(Gbytes) 来显示单位!
-t 在输出的最终结果,显示物理内存与 swap 的总量

l

例子:

  • uname:查阅系统与核心相关信息

​​​​​​​语法

uname [-asrmpi]

选项与参数

选项 参数
-a 所有系统相关的信息,包括底下的数据都会被列出来;
-s 系统核心名称
-r 核心的版本
-m 本系统的硬件名称,例如 i686 或者 x86_64 等;
-p CPU 的类型,与 -m 类似,叧是显示的是 CPU的类型!
-i 硬件的平台 (ix86)

例子:

使用命令:uname -a

  • uptime:观察系统启动时间与工作负载

​​​​​​​例子:

使用命令:uptime


发布了91 篇原创文章 · 获赞 247 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_36243942/article/details/83743135