鸟哥 Linux 私房菜 第17章 程序管理与SELinux 初探

鸟哥 Linux 私房菜 第17章 程序管理与SELinux 初探

17.1 什么是进程

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

17.1.1 进程与程序

  • 程序(program):通常为二进制程序放置在存储媒介上(如硬盘、光盘、软盘、磁带等),以物理文件的形式存在
  • 进程(process):程序被触发后,执行者的权限和属性、程序的程序代码与所需数据等都会被加载到内存中,操作系统并给予这个内存内的单元一个标识符(PID),可以说,进程就是一个正在运行的程序。

17.2 工作管理(job control)

这个工作管理(job control)是用在 bash 环境下的,也就是说:当我们登录系统取得 bash shell 之后,在单一终端机下同时进行多个工作的行为管理。举例来说,我们在登录 bash 后,想要一边复制文件一边进行数据查找,一边进行编译,还可以一边进行 vi 程序编写。当然我们可以重复登录那 6 个命令行界面的终端机环境中,不过,也能在一个 bash 内实现,就是使用 job control.

17.2.1 什么是工作管理

要进行bash 的 job control 必须要注意到的限制是:

  • 这些工作所触发的进程必须来自于你 shell 的子进程(只管理自己的 bash)
  • 前台:你可以控制与执行命令的这个环境称为前台(foreground)的工作
  • 后台:可以自行运行的工作,你无法使用 [Ctrl] + C 终止它,可使用 bg/fg 调用该工作
  • 后台中执行的进程不能等待 terminal/shell 的输入(input)

17.2.2 job control 的管理

实际进行 job 控制的命令

  • 直接将命令丢到后台中执行的 & :在命令的最后 空格 + & 就可以将该命令在后台执行。不过,此时该命令的所有输出还是会打印在当前界面上,可以通过重定向来排除后台工作对于前台界面的影响。
  • 将目前的工作丢到后台中暂停:[Ctrl] + Z
  • 查看目前的后台工作状态:jobs。 -l 显示 job PID;-r 只显示后台运行的 job;-s 只显示后台当中暂停的 job。
  • 将后台工作拿到前台来处理:fg。fg %[job number] 恢复某个 job number 的后台工作到前台。不过不指定 job number,将恢复最近一个被放置到后台的 job。通过 jobs 查看后台工作,显示 + 表示最近放置的工作,显示 - 表示次最近放置的工作。
  • 让工作在后台下的状态变成运行中:bg。同样通过 bg %[job number] 指定需要后台执行的工作。
  • 管理后台当中的工作:kill。可以通过 kill -l 来查阅所有支持的信号。命令格式为 kill -[signal] %[job number],其中 -1 表示重新读取一次参数的配置文件;-2 执行 Ctrl + C 操作;-9 立刻强制删除一个工作;-15(-SIGTERM) 以正常的程序方式终止一项工作。kill 默认的操作对象是进程,因此可以省去 %,直接使用 PID 进行操作。

17.2.3 脱机管理问题

要注意的是,我们在工作管理当中提到的后台指的是在终端机模式下可以避免 [Ctrl] + C 中断的一个情境,并不是放到系统的后台去。所以,工作管理的后台依旧与终端机有关。在这样的情况下,如果你是以远程连接方式连接到你的 Linux 主机,并且将工作以 & 的方式放到后台去,在工作尚未结束的情况下你脱机了,该工作是不会被继续执行的。

此时如果需要在系统后台执行,可以使用 at 命令或者 nohup 来处理。

nohup [命令与参数] (&) 在终端机前台(后台)中工作。不过 nohup 并不支持 bash 内置的命令,因此你的命令必须要是外部命令才行。同时 nohup 默认将该命令的输出重定向到当前路径的 nohup.out 文件中。

17.3 进程管理

进程管理能够解决的实际问题:

  • 当整个系统资源快要被使用光时,是否能够找出最耗系统的那个进程,然后删除该进程,让系统恢复正常呢?
  • 如果由于某个程序写得不好,导致产生一个有问题得进程在内存当中,你又该如何找出它,然后将它删除呢?
  • 同时有五六项工作在你的系统当中运行,但其中有一项工作才是最重要的,该如何让那一项重要的工作被最优先执行呢?

17.3.1 进程的查看

ps:将某个时间点的进程运行情况选取下来。ps -l 查阅自己的 bash 程序;ps aux 查看所有系统运行的程序。

ps -l 结果说明:

  • F:代表这个进程标志(process flags),说明这个进程的权限。4 表示此进程的权限为 root,1 表示此进程仅可进行复制(fork)而无法实际执行(exec)。
  • S:代表这个进程的状态(STAT)。R(Running)该进程正在运行中;S(Sleep)该进程目前正在睡眠状态(idle),但可以被唤醒(signal);D 不可被唤醒的睡眠状态,通常这个进程可能在等待 I/O 的情况;T 停止状态;Z(Zombie)僵尸状态,进程已经终止但却无法被删除至内存外。
  • UID/PID/PPID
  • 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 的缩写,造成此程序的触发进程的命令为何

ps aux 结果说明:

  • USER:该进程属于哪个用户账号
  • %CPU:该进程使用掉的 CPU 资源百分比
  • %MEM:该进程所占用的物理内存百分比
  • VSZ:该进程使用掉的虚拟内存量(KB)
  • RSS:该进程占用的固定的内存量(KB)
  • START:该进程被触发启动的时间
  • COMMAND:该进程的实际命令

top:动态查看进程的变化。

pstree:以树的形式将进程的关系描述出来

猜你喜欢

转载自blog.csdn.net/a40850273/article/details/104169257
今日推荐