shell中的进程

通常,现在的操作系统都支持多任务,意味着操作系统(给用户)造成了一种假象,(让用户觉得) 它同时能够做多件事情,事实上,它是快速地轮换执行这些任务的。Linux 内核通过使用进程,来管理多任务。通过进程,Linux 安排不同的程序等待使用 CPU。
本博客将介绍以下内容:

ps – 报告当前进程快照
top – 显示任务
jobs – 列出活跃的任务
bg – 把一个任务放到后台执行
fg – 把一个任务放到前台执行
kill – 给一个进程发送信号
killall – 杀死指定名字的进程
shutdown – 关机或重启系统
查看进程

查看进程,最常使用地命令(有几个命令)是 ps。ps 程序有许多选项,它最简单地使用形式是这样的:

[me@linuxbox ~]$ ps
PID TTY TIME CMD
5198 pts/1 00:00:00 bash
10129 pts/1 00:00:00 ps

以上结果中,PID表示进程号;TTY表示进程的控制终端;TIME表示进程所消耗的CPU时间数量。CMD表示命令。

若想知道更多的关于进程状态的信息,可以使用ps x命令。

[me@linuxbox ~]$ ps x
PID TTY STAT TIME COMMAND
2799 ? Ssl 0:00 /usr/libexec/bonobo-activation-server –ac
2820 ? Sl 0:01 /usr/libexec/evolution-data-server-1.10 --

加上 “x” 选项,告诉 ps 命令,展示所有进程,不管它们由什么终端(如果有的话)控制。在 TTY 一栏中出现的 “?” ,表示没有控制终端。使用这个 “x” 选项,可以看到我们所拥有的每个进程的信息。
进程状态有以下几种:

状态 意义
R 运行。这意味着,进程正在运行或准备运行。
S 正在睡眠。 进程没有运行,而是,正在等待一个事件, 如一个按键或者网络数据包。
D 不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动器的 I/O。
T 已停止。 已经指示进程停止运行。
Z 一个死进程或“僵尸”进程。这是一个已经终止的子进程,但是它的父进程还没有清空它。 (父进程没有把子进程从进程表中删除)
< 一个高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。 进程的这种属性叫做 niceness。具有高优先级的进程据说是不好的(less nice), 因为它占用了比较多的 CPU 时间,这样就给其它进程留下很少时间。
N 低优先级进程。 一个低优先级进程(一个“好”进程)只有当其它高优先级进程执行之后,才会得到处理器时间。

另一个流行的选项组合是 “aux”。这会给我们更多信息:

[me@linuxbox ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2136 644 ? Ss Mar05 0:31 init
root 2 0.0 0.0 0 0 ? S&lt; Mar05 0:00 [kt]

ps 命令列标题

标题 意思
USER 用户 ID. 进程的所有者。
%CPU 以百分比表示的 CPU 使用率
%MEM 以百分比表示的内存使用率
VSZ 虚拟内存大小
RSS 进程占用的物理内存的大小,以千字节为单位。
START 进程运行的起始时间。若超过24小时,则用天表示。
用 top 命令动态查看进程

虽然 ps 命令能够展示许多计算机运行状态的信息,但是它只是提供ps 命令执行时刻的机器状态快照。
为了看到更多动态的信息,我们使用 top 命令:

[me@linuxbox ~]$ top
top - 14:59:20 up 6:30, 2 users, load average: 0.07, 0.02, 0.00
Tasks: 109 total, 1 running, 106 sleeping, 0 stopped, 2 zombie
Cpu(s): 0.7%us, 1.0%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si
Mem: 319496k total, 314860k used, 4636k free, 19392k buff
Swap: 875500k total, 149128k used, 726372k free, 114676k cach

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6244 me 39 19 31752 3124 2188 S 6.3 1.0 16:24.42 trackerd

top 程序连续显示系统进程更新的信息(默认情况下,每三分钟更新一次),”top”这个名字来源于这个事实,top 程序是用来查看系统中“顶端”进程的。top 显示结果由两部分组成: 最上面是系统概要,下面是进程列表,以 CPU 的使用率排序。
top 命令信息字段

行号 字段 意义
1 top 程序名。
14:59:20 当前时间。
up 6:30 这是正常运行时间。它是计算机从上次启动到现在所运行的时间。 在这个例子里,系统已经运行了六个半小时。
2 users 有两个用户登录系统。
load average: 加载平均值是指,等待运行的进程数目,也就是说,处于运行状态的进程个数, 这些进程共享 CPU。展示了三个数值,每个数值对应不同的时间周期。第一个是最后60秒的平均值, 下一个是前5分钟的平均值,最后一个是前15分钟的平均值。若平均值低于1.0,则指示计算机工作不忙碌。
2 Tasks: 总结了进程数目和各种进程状态。
3 Cpu(s): 这一行描述了 CPU 正在执行的进程的特性。
0.7%us 0.7% of the CPU is being used for user processes. 这意味着进程在内核之外。
1.0%sy 1.0%的 CPU 时间被用于系统(内核)进程。
0.0%ni 0.0%的 CPU 时间被用于”nice”(低优先级)进程。
98.3%id 98.3%的 CPU 时间是空闲的。
0.0%wa 0.0%的 CPU 时间来等待 I/O。
4 Mem: 展示物理内存的使用情况。
5 Swap: 展示交换分区(虚拟内存)的使用情况。
把一个进程放置到后台(执行)

可参考:[Linux]让进程在后台可靠运行的几种方法
https://www.cnblogs.com/yiyide266/p/6272988.html
该篇博文介绍的很详细。

在一个终端中,输入 Ctrl-c,中断一个程序。
有时候,我们想要停止一个进程,而没有终止它。 这样会把一个前台进程移到后台等待。 输入 Ctrl-z,可以停止一个前台进程。
使用 fg 命令,可以恢复程序到前台运行,或者用 bg 命令把程序移到后台。
对于fg和bg,可分别用forward和behind记忆(可能本意就是这样)。

Signals

信号是操作系统与程序之间进行通信,所采用的几种方式中的一种。 当终端接受了其中一个按键组合或界面输入的一个命令后,它会给在前端运行的程序发送一个信号 程序,反过来,倾听信号的到来,当程序接到信号之后,则做出响应。 一个
程序能够倾听和响应信号,这个事实允许一个程序做些事情, 比如,当程序接到一个终止信号时,它可以保存所做的工作。

通过 kill 命令给进程发送信号

kill 命令被用来给程序发送信号。 它最常见的语法形式看起来像这样:

kill [-signal] PID...

如果在命令行中没有指定信号,那么默认情况下,发送 TERM(终止)信号。 kill 命令被经常用来发送以下命令:

编号 名字 含义
1 HUP 挂起。这个信号被用来告诉程序,控制的终端机已经“挂起”。 通过关闭一个终端会话,可以说明这个信号的作用。 发送这个信号到终端机上的前台程序,程序会终止。许多守护进程也使用这个信号,来重新初始化。 这意味着,当发送这个信号到一个守护进程后, 这个进程会重新启动,并且重新读取它的配置文件。 Apache 网络服务器守护进程就是一个例子。
2 INT 中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。
9 KILL 杀死。 这个信号很特别。 鉴于进程可能会选择不同的方式,来处理发送给它的信号,其中也包含忽略信号,这样,从不发送 Kill 信号到目标进程,而是内核立即终止这个进程。当一个进程以这种方式终止的时候,它没有机会去做些“ 清理” 工作,或者是保存劳动成果。 因为这个原因,把 KILL 信号看作杀手锏,当其它终止信号失败后,再使用它。
15 TERM 终止。 这是 kill 命令发送的默认信号。 如果程序仍然“活着”,可以接受信号,那么这个信号终止。
18 CONT 继续。 在停止一段时间后,进程恢复运行。
19 STOP 停止。 这个信号导致进程停止运行,而没有终止。像KILL信号,它不被发送到目标进程,因此它不能被忽略。

进程,和文件一样,拥有所有者,所以为了能够通过 kill 命令来给进程发送信号,你必须是进程的所有者(或者是超级用户)。

除了上表列出的 kill 命令最常使用的信号之外,还有一些系统频繁使用的信号。 以下是其它一些常用信号列表:

编号 名字 含义
3 QUIT 退出
11 SEGV 段错误。 如果一个程序非法使用内存,就会发送这个信号。 也就是说, 程序试图写入内存,而这个内存空间是不允许此程序写入的。
20 TSTP 终端停止。 当按下 Ctrl-z 组合键后,终端发送这个信号。 不像 STOP 信号,TSTP 信号由目标进程接收,且可能被忽略。
28 WINCH 改变窗口大小。 当改变窗口大小时,系统会发送这个信号。 一些程序,像 top 和 less 程序会响应这个信号,按照新窗口的尺寸,刷新显示的内容。

通过下面的命令可以得到一个完整的信号列表:

[me@linuxbox ~]$ kill -l
通过 killall 命令给多个进程发送信号

也有可能通过 killall 命令,给匹配特定程序或用户名的多个进程(当然一个也可以)发送信号。 下面是 killall 命令的语法形式:

killall [-u user] [-signal] name...
其它与进程相关的命令
命令名 命令描述
pstree 输出一个树型结构的进程列表,这个列表展示了进程间父/子关系。
vmstat 输出一个系统资源使用快照,包括内存,交换分区和磁盘 I/O。 为了看到连续的显示结果,则在命令名后加上延时的时间(以秒为单位)。 例如,“ vmstat 5” 。 终止输出,按下 Ctrl-c 组合键。
xload 一个图形界面程序,可以画出系统负载的图形。
tload 与 xload 程序相似,但是在终端中画出图形。 使用 Ctrl-c,来终止输出。

参考:
1.《The Linux Command Line》

猜你喜欢

转载自blog.csdn.net/hmxz2nn/article/details/81148151