天天看点

linux进程管理软件,Linux操作系统系列之进程管理

烈火网教程:Linux 的进程管理手段可比 Windows 强大多了,而且所有的进程都映射到 /proc 目录中,我们可以像操作普通文件那样查看这些进程的内存数据。

~$ ls -l /proc

dr-xr-xr-x 7 root root 0 2009-08-05 16:28 1

... ...

-r--r--r-- 1 root root 0 2009-08-08 22:55 version

-r--r--r-- 1 root root 0 2009-08-08 22:55 version_signature

-r-------- 1 root root 0 2009-08-08 22:55 vmallocinfo

-r--r--r-- 1 root root 0 2009-08-05 16:29 vmstat

-r--r--r-- 1 root root 0 2009-08-08 22:55 zoneinfo

~$ cat /proc/version

Linux version 2.6.28-11-generic ([email protected]) (gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) ) #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009

1. 作业管理

通过 "&" 将命令放在 "后台" 执行

~$ nano a.txt & # 后台执行 nano 编辑器

[1] 12988

[1]+ Stopped nano a.txt

~$ jobs # 查看当前所有执行的作业

[1]+ Stopped nano a.txt

~$ fg 1 # 将 1 作业调到前台执行

按 Ctrl + Z 键可以将正在执行的程序放到后台。对于 "Stopped" 状态的后台程序,我们可以用 "bg" 让其在后台 "Running"。

~$ sleep 1m # 休眠 1 分钟,并用 Ctrl + Z 让其在后台执行。

^Z

[1]+ Stopped sleep 1m

~$ jobs

[1]+ Stopped sleep 1m # sleep 命令被 "挂起"。

~$ bg 1 # 使用 fg 让 sleep 在后台执行。

[1]+ sleep 1m &

~$ jobs

[1]+ Running sleep 1m &

我们可以用 "kill" 命令终止作业。

~$ jobs

[1]+ Stopped sleep 1m

~$ kill -9 %1

[1]+ Stopped sleep 1m

~$ jobs

[1]+ Killed sleep 1m

kill 有几个主要的参数: -1 reload; -2 Ctrl + C; -9 强制删除; -15 以正常方式退出。

2. 进程管理

"ps" 用于查看当前运行的进程,参数很多,不过常用的就是 "aux"。

~$ ps aux | more

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.3 3084 1884 ? Ss 08:00 0:02 /sbin/init

root 2 0.0 0.0 0 0 ? S< 08:00 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S< 08:00 0:00 [migration/0]

root 4 0.0 0.0 0 0 ? S< 08:00 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 08:00 0:00 [watchdog/0]

root 6 0.0 0.0 0 0 ? S< 08:00 0:00 [events/0]

root 7 0.0 0.0 0 0 ? S< 08:00 0:00 [khelper]

root 8 0.0 0.0 0 0 ? S< 08:00 0:00 [kstop/0]

root 9 0.0 0.0 0 0 ? S< 08:00 0:00 [kintegrityd/0]

root 10 0.0 0.0 0 0 ? S< 08:00 0:00 [kblockd/0]

root 11 0.0 0.0 0 0 ? S< 08:00 0:00 [kacpid]

root 12 0.0 0.0 0 0 ? S< 08:00 0:00 [kacpi_notify]

...

显示结果列:

USER: 用户账号

PID: 进程编号

%CPU: CPU 占用百分比

%MEM: 内存占用百分比

VSZ: 虚拟内存占用量

RSS: 固定内存占用

TTY: 终端

STAT: 运行状态 (R: 运行; S: 睡眠; T: 终止; Z: 某种原因造成的僵尸进程)

START: 启动时间

TIME: CPU 运行时间

COMMAND: 命令行

我们还可以直接查看单个进程。

~$ ps 34

PID TTY STAT TIME COMMAND

34 ? S< 0:00 [kmpath_handlerd]

~$ ps -C ksnapd

PID TTY TIME CMD

35 ? 00:00:00 ksnapd

和 ps 静态输出不同,"top" 可以动态刷新进程信息(默认刷新间隔为 5 秒)。

~$ top

top - 12:02:29 up 4:02, 2 users, load average: 0.04, 0.04, 0.01

Tasks: 113 total, 1 running, 111 sleeping, 0 stopped, 1 zombie

Cpu(s): 0.2%us, 1.3%sy, 0.2%ni, 97.6%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 509504k total, 436672k used, 72832k free, 79376k buffers

Swap: 409616k total, 0k used, 409616k free, 212208k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

14 root 15 -5 0 0 0 S 1.9 0.0 0:11.08 ata/0

1 root 20 0 3084 1884 564 S 0.0 0.4 0:02.43 init

2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd

3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0

4 root 15 -5 0 0 0 S 0.0 0.0 0:00.33 ksoftirqd/0

5 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

第一行: 系统已启动时间; 在线用户数; 系统 1、5、10 分钟的负载 (通常不超过 1,如果持续大于 5 则需要检查)。

第二行: 进程统计。zombie 表示僵尸进程数量。

第三行: CPU 负载统计。

第四行: 内存使用统计。

第五行: 虚拟内存使用统计。

进程列信息:

PID: 进程编号

USER: 用户账号

PR: 优先级 (越小越早执行)

NI: Nice

%CPU: CPU 占用百分比

%MEM: 内存占用百分比

TIME+: CPU 运行时间

COMMAND: 命令行

我们可以用 "-d" 参数指定刷新频率 (秒)

~$ top -d 1

"-p" 参数用于指定某个具体的进程编号。

~$ top -d 1 -p 13952

运行时可以按 "h" 进入帮助菜单,查看显示和排序等快捷键。

3. 进程优先级

每个进程都有一个 "优先级 (Priority)" 属性,系统按照优先级 (升序)来安排执行次序。

PRI (new) = PRI (old) + Nice

由于 PRI 是由系统 "动态" 决定的,因此我们要调整优先级,需要通过 Nice 来完成。

~$ nano &

[1] 15174

[1]+ Stopped nano

~$ ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 R 1000 15086 15082 0 80 0 - 1447 - pts/0 00:00:00 bash

0 T 1000 15174 15086 0 80 0 - 929 signal pts/0 00:00:00 nano

0 R 1000 15177 15086 0 80 0 - 635 - pts/0 00:00:00 ps

~$ sudo renice -5 15174 # 调整优先级

15174: old priority 0, new priority -5

~$ ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 R 1000 15086 15082 0 80 0 - 1447 - pts/0 00:00:00 bash

0 T 1000 15174 15086 0 75 -5 - 929 signal pts/0 00:00:00 nano

0 R 1000 15182 15086 0 80 0 - 635 - pts/0 00:00:00 ps