Linux 学习 第六章 管理运行中的进程
本文最后更新于 749 天前,其中的信息可能已经有所发展或是发生改变。

第六章 管理运行中的进程

Linux 是一种多用户的操作系统,也是一种多任务系统。多任务意味着可以同时运行多个程序,运行程序的实例通常被称为进程

可通过 shell 启动、暂停、停止或杀死进程,还可将进程放到后台以及带到前台

6.1 理解进程

进程是命令的运行实例。系统中的进程通过一个进程 ID (PID) 进行识别,PID 相对于当前系统是唯一的。除了 PID 号之外,进程还与一个特定的用户账户和组账号相关联,有助于确定该进程可以访问哪些系统资源

用来显示进程相关信息的命令主要从 /proc 文件系统中存储的原始数据获取信息。每个进程都在 /proc 的一个子目录 (以该进程的 PID 命名) 中存储了自己的信息

6.2 列出进程

使用 ps 命令或者 top 命令,其中 top 命令提供了一种 更面向屏幕的方式列出进程

6.2.1 使用 ps 命令列出进程

使用 ps u 可显示用户名以及其他信息

VSZ:虚拟内存大小 (Virtual Set Size) 显示了镜像进程的大小 (单位:KB)

RSS:(Resident Set Size) 显示了内存中程序的大小

VSZ 是分配给进程的内存数量,RSS 是进程实际使用的内存数量 (表明了不能被交换的物理内存)

STAT 列:S 表示一个当前运行的进程,R 表示一个睡眠进程,+ 表示进程与前台操作相关联

查看当前用户所有进程:ps ux | less

查看所有用户进程:ps aux | less

也可以自定义输出列,并且根据某一列排序,例如

ps -eo pid,user,uid,group,gid,vsz,rss,comm --sort=-vsz | less

-e 为显示每一个运行中的进程,-o 后为显示的列,其中 comm 为命令,然后 --sort=-vsz 以 vsz 列从大到小排序

6.2.2 使用 top 命令列出和更改进程

使用 top 命令,默认按进程当前所使用的 CPU 百分比排序来显示进程

top 命令可以完成的操作:

命令miaos
h帮助
M按内存使用情况排序
1切换显示所有 CPU 使用情况 (系统有多个 CPU)
R反向排序
u然后输入用户名可以显示某用户的进程
r改变进程优先级 (nice 值)
k杀死进程 (kill 命令)

6.2.3 使用 System Monitor 列出进程

GNOME 桌面的 GUI 工具

6.3 管理后台和前台进程

对于没有 GUI 的系统,只能使用 shell 完成所有操作。虽然 Bash shell 没有包含一个 GUI 来管理多个程序,但可以在后台和前台直接移动活动程序,这样就可以运行很多程序并选择目前想要处理的程序

6.3.1 启动后台进程

将命令放入后台:

  1. 在命令后添加一个 &
  2. 使用 at 命令运行其他命令
  3. 对于运行中的进程使用 Ctrl+Z 停止,再输入 fg 带回前台或 bg 开始在后台运行

为避免后台输出干扰前台操作,可将其定向到空设备 2>/dev/null

可通过 jobs 命令查看后台运行的命令 (使用 -l 可查看 PID) 。在命令序号前 + 表示最近放到后台的作业,- 表示在最近放的后台作业之前放到后台的作业

6.3.2 使用前台和后台命令

如果想引用一个后台作业,通过 % 和作业编号 (jobs 命令的输出) ,此外还有如下方式

  • % — 引用最近放入后台的 (即编号后带有 + 的)
  • %string — 以 string 开头的作业 (必须明确,即匹配结果唯一)
  • %?string — 命令行任意位置包含 string (同样必须明确,即匹配结果唯一)
  • %-- — 引用在最近放的后台作业之前放到后台的作业 (即编号后带有 – 的)

使用 fg %1 以将编号为 1 的任务带到前台,使用 bg %5 以将停止的编号为 5 的命令在后台继续运行

对于 vi 命令放到后台前会自动停止,记得先保存文件再放入后台以防忘记

6.4 杀死和改变进程

可以向进程发送不同的信号来更改其行为,也可以更改进程的处理器优先级

6.4.1 使用 kill 和 killall 命令杀死进程

虽然这俩命令常用于终止一个运行中的进程,但实际上是向进程发送一些有效信号。信号通过数字或名称来表示

信号数字描述
SIGHUP1重新读取配置文件
SIGIN2通过键盘中断
SIGQUIT3通过键盘退出
SIGABRT6调用 abort(3) 生成的中止信号
SIGKILL9杀死信号
SIGTERM15终止信号
SIGCONT19,18,25继续被停止的进程
SIGSTOP17,19,23停止进程

对于最后两个信号,第一个值适用于 Alpha 和 SPARC,中间的值适用于 x86,最后一个值适用于 MIPS 体系结构

默认为 SIGTERM (15) 信号。虽然不同进程可以对不同信号予以响应,然而任何进程都不能阻止 SIGKILL (9) 和 SIGSTOP 信号

  1. 使用 kill 命令并根据 PID 向进程发送信息 kill [信号] [PID]

例如杀死进程 ID 为 2333 的进程:kill -9 2333 或者 kill -SIGKILL 2333

  1. 使用 killall 命令并根据名称向进程发送信号

与 kill 命令类似,当要杀死许多同名命令很有用,但要防止改变有用的同名进程

例如重启 gnome-shell:killall -1 gnome-shell

6.4.2 使用 nice 和 renice 命令设置处理器优先级

当 Linux 内核尝试决定哪些运行中的进程可以访问 CPU 时,其中一个需要考虑的因素就是进程上的 nice 值,范围 -20~19,默认为 0

nice 值越低,优先级越高,只有 root 用户可以设置负值并将优先级调高 (值调低),普通用户只能调低 (值调高)

可以使用 nice 命令运行一个带有特定 nice 值的命令,也可以使用 renice 命令和 PID 更改已运行进程的 nice 值,例如

nice -n +5 updatedb & 在后台以 5 的优先级运行 updatedb 命令

renice -n 3 2333 将 PID 为 2333 的进程的 nice 值改为 3

6.5 使用 cgroups 限制进程

为一个进程所设置的 nice 值不能应用于子进程,也就是说,nice 无法对特定用户或应用程序可以使用的 Linux 系统资源总量进行限制

可以使用 cgroups 命令将一个进程确定为一个任务 (task),并从属于一个特定的控制组。可以在一个层次结构中设置任务,其中包含一个被称为守护进程 (daemon) 的任务 (为所有后台服务器进程设置了默认限制) 以及子任务,子任务设置像 httpd 或 vsftpd 上的特定限制

当一个任务启动一个进程时,其子进程将继承父进程限制设置,限制内容包括存储、处理器调度、进程报告、CPU 分配、设备访问、内存使用情况等

设置 cgroups 可能非常棘手,包括编辑配置文件创建 cgroups (/etc/cgconfig.conf) 或限制特定用户或组 (/etc/cgrules.conf) 。可以使用 cgreate 命令创建 cgroups,从而将这些组添加到 /sys/fs/cgroup 层次结构中。如果设置不正确,系统可能无法启动

本文链接:Linux 学习 第六章 管理运行中的进程
本文章由 yexca 采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇