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 命令信息字段

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

可参考:[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 命令被经常用来发送以下命令:

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

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

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

编号名字意义
3QUIT退出
11SEGV段错误。 如果一个程序非法使用内存,就会发送这个信号。 也就是说, 程序试图写入内存,而这个内存空间是不允许此程序写入的。
20TSTP终端停止。 当按下 Ctrl-z 组合键后,终端发送这个信号。 不像 STOP 信号,TSTP 信号由目标进程接收,且可能被忽略。
28WINCH改变窗口大小。 当改变窗口大小时,系统会发送这个信号。 一些程序,像 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》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值