上篇主要浅析多用户有关的权限问题,本篇主要介绍与多任务有关的进程基础知识。
一般而言,操作系统都支持多任务,意味着操作系统需要在一个执行中的程序和另一个程序 之间频繁快速地切换,而这种切换造成一种系统能同时段并行处理的错觉。Linux 内核通过使用进程来管理多任务。所谓进程,就是 Linux 给正在等待使用 CPU 的各种程序进行一定形式的组织安排。
启动程序时,偶尔遇到卡顿、等待响应等情况,可以借助一些工具查看程序的运行状态,并及时处理掉“失控”的进程。
常用命令如下:
ps – 报告当前进程快照
top – 显示任务
jobs – 列出活跃的任务
bg – 把一个任务放到后台执行
fg – 把一个任务放到前台执行
kill – 给一个进程发送信号
kill all – 杀死指定名字的进程
shutdown – 关机或重启系统
Ubuntu系统启动时,内核先把一些它自己的活动初始化为进程,然后运行一个叫做 init 的程 序。init,依次运行一系列shell脚本(位于/etc),可以启动所有的系统服务。其中许多系统服务以守护(daemon)程序的形式实现,守护程序仅在后台运行,没有任何用户接口 (User Interface)。
在进程方案中,一个程序可以启动另一个程序,专业的讲,是一个父进程可以产生一个子进程。 内核对各进程总体维护,保证进程有序运转——具体来说,系统分配给每个进程一个数字,这 个数字叫做进程 (process) ID 或 PID。PID 号按升序分配,init 进程的PID总是1。内核也对分配给每个进程的内存和就绪状态进行跟踪以便继续执行这个进程。像文件一样,进程也有所有者和用户ID,有效用户ID,等等。
ps 查看进程
ps 全称process status,默认情况下,使用ps 不会显示很多进程信息,如下所示:
[me@YangtianM4000s~]$ ps PID TTY TIME CMD 5448 pts/2 00:00:00 bash 5575 pts/2 00:00:00 ps
显示两个命令bash 和ps 。TTY 是 “Teletype”(直译为电传打字机) 的简写,指进程的控制终端。TIME 字段表示进程所消耗的 CPU 时间数量。ps 加上 “x” 选项,可以展示所有进程,不管它们由什么终端(如果有的话)控制。在 TTY 一栏中出现的 “?” ,表示没有控制终端。
top – 显示任务
虽然 ps 命令能够展示许多计算机运行状态的信息,但是它只是提供 ps 命令执行时刻的机器状态。为了看到更多动态的信息,使用 top 命令,top 程序以进程活动顺序显示连续更新的系统进程列表(默认3s刷新一次)。top 显示结果由两部分组 成:最上面是系统概要,下面是进程列表,以 CPU 的使用率排序。
其中系统概要包含许多有用信息。
行号 | 字段 | 含义 |
---|---|---|
1 | top | 程序名 |
17:40:21 | 当前时间 | |
up 7days | 计算机从上次启动到现在所 运行的时间。系统已经运行了7天 | |
1 user | 有一个用户登录系统 | |
load average | 加载平均值,指等待运行的进程数目,也就是说,处 于可以运行状态并共享 CPU 的进程个数。这里展示 了三个数值,每个数值对应不同的时间段。第一个是 最后 60 秒的平均值,下一个是前 5 分钟的平均值,最 后一个是前 15 分钟的平均值。若平均值低于 1.0,则 指示计算机工作不忙碌。 | |
2 | Tasks | 统计了进程数目和这些进程的各种状态。 |
3 | Cpu(s) | 描述了 CPU 正在进行的活动的特性 |
0.3%us | 0.3% 的 CPU 被用于用户进程。这意味着进程在内核 之外。 | |
0.3%sy | 0.3% 的 CPU 被用于系统(内核)进程。 | |
0.0%ni | 0.0% 的 CPU 被用于”nice”(低优先级)进程。 | |
99.3%id | 99.3% 的 CPU 是空闲的。 | |
0.1%wa | 有0.1 % 的 CPU 用于等待 I/O | |
0.0%hi | 硬件中断占用CPU百分比0.0% | |
4 | Mem | 展示物理内存的使用情况 |
Swap | 展示交换分区(虚拟内存)的使用情况 |
进程的控制
- 终止进程:使用命令‘Ctrl + c’
- 把一个进程放置到后台(background)执行:
举个例子,运行xlogo程序,并加上“&”字符,
这个 xlogo 窗口出现,并且 shell 提示符返回信息,启动任务号【1】,PID为7886的程序,这是shell的任务控制特性。shell 的任务控制功能给出了一种列出从我们终端中启动了的任务的方法。使用“jobs"命令,可以看到如下信息:
图中显示我们有一个任务,编号为“1”,正在运行,并且这个任务的命令是 xlogo &。
- 进程返回到前台:
一个在后台运行的进程对一切来自键盘的输入都免疫,也不能用 Ctrl-c 中断。为了让一个进程返回前台 (foreground),使用 fg 命令,其后跟随着一个百分号和任务序号:
- 暂停一个进程:
实际场景中,如果想要暂停一个进程,而不是彻底终止它,即允许前台进程移动到后台。输入 Ctrl-z即可实现。
Kill命令
通常,kill 命令被用来“杀死”程序。当shell 打印出这个后台进程的任务编号 和 PID后,kill加上相应PID后,可终止相关进程。其实, kill 命令不是真的“杀死”程序,而是给程序发送信号(Signal)。信号是操作系统与程序之间进行通信时所采用的几种方式中的一种。当终端接受了其中一个按键组合后,它会给在前台运行的程序发送一个信号。在使用 Ctrl-c 的情况下,会发送一个叫做INT(Interrupt, 中断)的信号;当使用 Ctrl-z 时,则发送一个叫做 TSTP(Terminal Stop, 终端停止)的信号。程序,相应地,监听信号的到来,当程序接到信号之后,则做出响应。
命令形式为:kill [-signal] PID...
就目前开发中,最常用的信号有:
1(HUP)-重新加载进程。
9(KILL)-终止进程。【KILL 信号从不被发送到目标程序,而是内核立即终止这个进程】
15(TERM)-正常停止进程,而非终止。
要获取所有可用信号的列表,只需使用命令:kill -l
未完待续》》》》》》》》》》》》》》》》》》》》》》》》