进程管理

Mr.Hope ... 2020-6-3 大约 5 分钟

# 进程管理

# ps

ps 命令用来列出进程信息。

$ ps
PID TTY           TIME CMD
5198 pts/1    00:00:00 bash
10129 pts/1   00:00:00 ps
1
2
3
4

不带任何参数时,ps 只列出与当前 Session 相关的进程。输出结果中,PID 是进程 ID、TTY 是进程的终端号(如果显示?,则表示进程没有终端),TIME 是消耗的 CPU 时间,CMD 是触发进程的命令。

x 参数列出所有进程的详细信息,包括不在当前 Session 的信息。

$ 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 --
1
2
3
4

这时的输出结果,会多出 STAT 一栏,表示状态。它的各种值如下。

  • R 正在运行或准备运行
  • S 正在睡眠,即没有运行,正在等待一个事件唤醒
  • D 不可中断睡眠。进程正在等待 I/O,比如磁盘驱动器的 I/O
  • T 已停止,即进程停止运行
  • Z “僵尸”进程。即这是一个已经终止的子进程,但父进程还没有清空它(没有把子进程从进程表中删除)
  • < 高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。
  • N 低优先级进程。一个低优先级进程(一个“好”进程)只有当其它高优先级进程执行之后,才会得到处理器时间。

aux 参数可以显示更多信息。

$ 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]
1
2
3
4

输出结果包含的列的含义如下。

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

# top

top 命令可以查看机器的当前状态。

top
1

它的输出结果分为两部分,最上面是系统概要,下面是进程列表,以 CPU 的使用率排序。

输出结果是动态更新的,默认每三分钟更新一次。

# jobs

jobs 命令用来查看后台任务。

$ jobs
[1]+ Running            xlogo &
1
2

输出结果之中,每个后台任务会有一个编号。上面结果中,xlogo 的编号是 1+ 表示正在运行。

# fg

fg 命令用于将后台任务切换到前台。

fg %1
1

fg 命令之后,跟随着一个百分号和工作序号,用来指定切换哪一个后台任务。如果只有一个后台任务,那么 fg 命令可以不带参数。

# bg

bg 命令用于将一个暂停的前台任务,转移到后台。只有暂停的任务,才能使用 bg 命令,因为正在运行的任务,命令行是无法输入的。

bg %1
1

Ctrl + z 可以暂停正在运行的前台任务。

# kill

kill 命令用于杀死进程。它的参数是进程 ID。

kill 28401
1

kill 命令的实质是操作系统向进程发送信号。在使用 Ctrl-c 的情况下,会发送一个叫做 INT(中断)的信号;当使用 Ctrl-z 时,则发送一个叫做 TSTP(终端停止)的信号。

kill 命令可以用来向进程发送指定信号。

kill [-signal] PID
1

下面是常见信号。

  • HUP: 编号 1,表示挂起。发送这个信号到前台程序,程序会终止。许多守护进程也使用这个信号,来重新初始化。这意味着,当发送这个信号到一个守护进程后, 这个进程会重新启动,并且重新读取它的配置文件。Apache 网络服务器守护进程就是一个例子。
  • INT: 编号 2,中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。
  • KILL: 编号 9,杀死。进程可能选择忽略这个信号。所以,操作系统不发送该信号到目标进程,而是内核立即终止这个进程。当一个进程以这种方式终止的时候,它没有机会去做些“清理”工作,或者是保存劳动成果。因为这个原因,把 KILL 信号看作杀手锏,当其它终止信号失败后,再使用它。
  • TERM: 编号 15,终止。这是 kill 命令发送的默认信号。如果程序仍然“活着”,可以接受信号,那么这个信号终止。
  • CONT: 编号 18,继续。在停止一段时间后,进程恢复运行。
  • STOP: 编号 19,停止。这个信号导致进程停止运行,而没有终止。像 KILL 信号,它不被 发送到目标进程,因此它不能被忽略。
  • QUIT: 编号 3,退出
  • SEGV: 编号 11,段错误。如果一个程序非法使用内存,就会发送这个信号。也就是说,程序试图写入内存,而这个内存空间是不允许此程序写入的。
  • TSTP: 编号 20,终端停止。当按下 Ctrl-z 组合键后,终端发送这个信号。不像 STOP 信号, TSTP 信号由目标进程接收,且可能被忽略。
  • WINCH: 编号 28,改变窗口大小。当改变窗口大小时,系统会发送这个信号。一些程序,像 top 和 less 程序会响应这个信号,按照新窗口的尺寸,刷新显示的内容。

-l 参数可以列出所有信号。

kill -l
1

# killall

killall 命令用于向指定的程序或用户发送信号。

killall [-u user] [-signal] name
1

# 其他进程相关命令

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