进程相关命令
- 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
其中tty表示用户登录的终端,time表示进程消耗的cpu时间数量。
当前看到的进程是,只是列出与当前终端会话相关的进程.因此为了显示全部的进程信息,可以使用。
[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< Mar05 0:00 [kt]
and many more...
这个选项的组合能够显示每个用户的进程信息,而且输出的方式也很详尽:
- USER 用户 ID. 进程的所有者。
- %CPU 以百分比表示的 CPU 使用率
- %MEM 以百分比表示的内存使用率
- VSZ 虚拟内存大小
- RSS 进程占用的物理内存的大小,以千字节为单位。
- START 进程运行的起始时间。若超过24小时,则用天表示。
top
ps 命令只提供执行时刻的机器状态快照。
top 命令能够提供动态的进程信息:
[me@linuxbox ~]$ top
top 程序连续显示系统进程更新的信息(默认情况下,每三分钟更新一次),top显示信息由两部分组成: 最上面是系统概要,下面是进程列表,以 CPU 的使用率排序。
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
....
其中系统概要包含许多有用信息。
下表是对系统概要的说明:
行号 | 字段 | 意义 |
---|---|---|
1 | top | 程序名 |
14:59:20 | 当前时间 | |
up 6:30 | 正常运行时间 | |
2 users | 有两个用户登录系统 | |
load average: | ||
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 | 展示交换分区(虚拟内存)的使用情况 |
top 程序接受一系列从键盘输入的命令。两个最有趣的命令是 h 和 q。
h,显示程序的帮助屏幕,q, 退出 top 程序。
控制进程
中断一个进程
[me@linuxbox ~]$ xlogo
[me@linuxbox ~]$
在一个终端中,输入 Ctrl-c,中断一个程序。这意味着,我们礼貌地要求终止这个程序。 输入 Ctrl-c 之后,xlogo 窗口关闭,shell 提示符返回。
把一个进程放置到后台(执行)
把终端看作是一个有前台(表层放置可见的事物,像 shell 提示符) 和后台(表层之下放置隐藏的事物)的设备。
如果想启动一个程序,让它立即在后台 运行,我们在程序命令之后,加上”&”字符:
[me@linuxbox ~]$ xlogo &
[1] 28236
[me@linuxbox ~]$
执行命令之后,这个 xlogo 窗口出现,并且 shell 提示符返回,同时打印一些有趣的数字。 这条信息是 shell 特性的一部分,叫做工作控制。通过这条信息,shell 告诉我们,已经启动了 工作号为1(“[1]”),PID 为28236的程序。如果我们运行 ps 命令,可以看到我们的进程:
[me@linuxbox ~]$ ps
PID TTY TIME CMD
10603 pts/1 00:00:00 bash
28236 pts/1 00:00:00 xlogo
28239 pts/1 00:00:00 ps
jobs命令
这个 shell 功能可以列出从终端中启动的任务。执行 jobs 命令,我们可以看到这个输出列表:
[me@linuxbox ~]$ jobs
[1]+ Running xlogo &
结果显示我们有一个任务,编号为“1”,它正在运行,并且这个任务的命令是 xlogo &。
进程返回到前台
一个在后台运行的进程对一切来自键盘的输入都免疫,也不能用 Ctrl-c 来中断它。
使用 fg 命令,让一个进程返回前台执行:
[me@linuxbox ~]$ jobs
[1]+ Running xlogo &
[me@linuxbox ~]$ fg %1
xlogo
fg 命令之后,跟随着一个百分号和工作序号(叫做 jobspec)。如果我们只有一个后台任务,那么 jobspec 是可有可无.
停止一个进程
有时候,我们想要停止一个进程,而没有终止它。这样会把一个前台进程移到后台等待。 输入 Ctrl-z,可以停止一个前台进程。
[me@linuxbox ~]$ xlogo
[1]+ Stopped xlogo
[me@linuxbox ~]$
使用 fg 命令,可以恢复程序到前台运行,或者用 bg 命令把程序移到后台。
[me@linuxbox ~]$ bg %1
[1]+ xlogo &
[me@linuxbox ~]$
和 fg 命令一样,如果只有一个任务的话,jobspec 参数是可选的。
Signals
kill 命令被用来“杀死”程序。这样我们就可以终止需要杀死的程序。这里有一个实例:
[me@linuxbox ~]$ xlogo &
[1] 28401
[me@linuxbox ~]$ kill 28401
[1]+ Terminated xlogo
首先,我们在后台启动 xlogo 程序。shell 打印出 jobspec 和这个后台进程的 PID。下一步,我们使用 kill 命令,并且指定我们想要终止的进程 PID。也可以用 jobspec(例如,“%1”)来代替 PID。
虽然这个命令很直接了当,但不仅仅这些。这个 kill 命令不是确切地“杀死”程序,而是给程序 发送信号。信号是操作系统与程序之间进行通信,所采用的几种方式中的一种。我们已经看到 信号,在使用 Ctrl-c 和 Ctrl-z 的过程中。当终端接受了其中一个按键组合后,它会给在前端运行 的程序发送一个信号。
在使用 Ctrl-c 的情况下,会发送一个叫做 INT(中断)的信号;
当使用 Ctrl-z 时,则发送一个叫做 TSTP(终端停止)的信号。
程序,反过来,倾听信号的到来,当程序 接到信号之后,则做出响应。一个程序能够倾听和响应信号,这个事实允许一个程序做些事情, 比如,当程序接到一个终止信号时,它可以保存所做的工作。
通过 kill 命令给进程发送信号
kill 命令被用来给程序发送信号。它最常见的语法形式看起来像这样:
kill [-signal] PID...
如果在命令行中没有指定信号,那么默认情况下,发送 TERM(终止)信号。kill 命令被经常 用来发送以下命令:
也有可能通过 killall 命令,给匹配特定程序或用户名的多个进程发送信号。下面是 killall 命令的语法形式:
killall [-u user] [-signal] name...
为了说明情况,我们将启动一对 xlogo 程序的实例,然后再终止它们:
[me@linuxbox ~]$ xlogo &
[1] 18801
[me@linuxbox ~]$ xlogo &
[2] 18802
[me@linuxbox ~]$ killall xlogo
[1]- Terminated xlogo
[2]+ Terminated xlogo
记住,和 kill 命令一样,你必须拥有超级用户权限才能给不属于你的进程发送信号。
更多和进程相关的命令
因为监测进程是一个很重要的系统管理任务,所以有许多命令与它相关:
命令名 命令描述
- pstree 输出一个树型结构的进程列表,这个列表展示了进程间父/子关系。
- vmstat 输出一个系统资源使用快照,包括内存,交换分区和磁盘 I/O。 为了看到连续 的显示结果,则在命令名后加上延时的时间(以秒为单位)。例如,“vmstat 5”。 终止输出,按下 Ctrl-c 组合键。
- xload 一个图形界面程序,可以画出系统负载的图形。
- tload 与 xload 程序相似,但是在终端中画出图形。使用 Ctrl-c,来终止输出。