进程管理命令

小知识:Linux系统启动时,运行的第1个进程名为init。这个进程是所有进程的父进程,其PID永远是1。PID是系统分配给进程的唯一的标识符,虽然系统中可能存在两个名称一样的进程,但PID绝对不同。当系统启动进程时,init会通过系统调用的方式启动新进程,并为新进程分配资源和PID等。而当进程结束时,系统会收回分配给进程的资源和PID等,这些资源和PID可以重复利用,下一次系统可能会将这些资源又分配给另一个进程。

一、查看进程命令ps

【命令格式】

ps [option]

【常用选项】

a:显示所有 ‘终端进程’。

u:显示所有 ‘用户进程’。

x:显示所有进程,包括没有明确终端的进程(通常是一些后台服务进程)。

e:显示所有进程。此选项与选项x类似,但使用的格式为BSD系统格式。

f:显示UID,PPID(父进程ID),C(CPU占用率)和STIME(进程启动时间)字段。

l:以长格式显示进程列表。

【用法示例】

(1)如果不加任何参数,ps命令会输出当前用户在当前终端中的进程:

[root@localhost ~]# ps 
  PID TTY          TIME CMD
 4253 pts/0    00:00:00 bash
12681 pts/0    00:00:00 ps

左至右各字段:

PID:进程ID号。

TTY:使用的终端。

TIME:占用CPU的时间。

CMD:启动进程的命令。

(2)如果使用选项u,则输出当前用户的所有进程的详细情况:

[root@localhost ~]# ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3894  0.0  0.0   1636   456 tty1     Ss+  04:56   0:00 /sbin/mingetty tty1
root      3905  0.0  0.0   1640   460 tty2     Ss+  04:56   0:00 /sbin/mingetty tty2
root      3908  0.0  0.0   1640   464 tty3     Ss+  04:56   0:00 /sbin/mingetty tty3
root      3909  0.0  0.0   1640   464 tty4     Ss+  04:56   0:00 /sbin/mingetty tty4
root      3910  0.0  0.0   1636   460 tty5     Ss+  04:56   0:00 /sbin/mingetty tty5
root      3911  0.0  0.0   1636   460 tty6     Ss+  04:56   0:00 /sbin/mingetty tty6
root      3999  0.5  2.2  17716 11556 tty7     Ss+  04:56   1:23 /usr/bin/Xorg :0 -br -audit 0 -auth
root      4253  0.0  0.2   4632  1544 pts/0    Ss   04:57   0:00 bash
root     12701  0.0  0.2   4628  1508 pts/1    Ss+  08:42   0:00 bash
root     13135  0.0  0.1   4224   936 pts/0    R+   08:56   0:00 ps u

各字段含义:

USER:运行此进程的用户名称。(与Windows不同,系统进程用户是root,而Windows是system用户)。

PID:进程ID号。

%CPU:进程的CPU占用率。

%MEM:实际内存占用率。

VSZ:进程占用虚拟内存大小,单位是KB。

RSS:进程占用物理内存大小,单位是KB。

TTY:使用的终端。

STAT:目前进程所处的状态属性。

START:进程开始运行的时间。

TIME:进程占用CPU的时间总和。

COMMAND:启动进程使用的命令。

字段STAT一般由1-3个符号组成,常见的进程状态标识符及含义:

D:不可中断的等待状态,通常是等待I/O设备(磁盘及网络等)的数据等

R:正处于运行队列中的进程

S:正处于中断休眠状态的进程,该进程可能是在等待某个终端消息

T:已停止工作的进程,因其被跟踪所以存在

X:已经死亡的进程,通常不会看到这类进程

Z:已经僵死的进程

<:高优先级进程

N:低优先级进程

s:会话的管理者

+:进程会使用前台的终端

l:这是一个多线程的进程

注意:在Linux系统中,僵死的进程是指已经推出并正在释放系统资源的进程,并非未响应的进程。

(3)查看所有用户及系统的进程:

[root@localhost perl]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2044   664 ?        Ss   08:42   0:01 init [5]      
root         2  0.0  0.0      0     0 ?        S    08:42   0:00 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   08:42   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    08:42   0:00 [watchdog/0]
root         5  0.0  0.0      0     0 ?        S<   08:42   0:00 [events/0]
...

(4)ps命令的另一个重要用途是检测服务是否成功启动。

[root@localhost ~]# ps aux | grep telnet | grep -v grep
root     12936  0.0  0.1   1868   788 ?        Ss   12:38   0:00 in.telnetd: 192.168.1.10
root     15014  0.0  0.1   1872   788 ?        Ss   13:47   0:00 in.telnetd: 192.168.1.10

二、进程树

在Linux系统中,父进程、子进程之间的关系非常复杂。Linux使用了一棵树的方法表示进程与子进程之间的关系。要查看Linux系统中的进程树,可以使用命令pstree。

[root@localhost ~]# pstree
init─┬─acpid
     ├─atd
     ├─auditd─┬─python
     │        └─{auditd}
     ├─automount───4*[{automount}]
     ├─avahi-daemon───avahi-daemon
     ├─bonobo-activati───{bonobo-activati}
     ├─bt-applet
     ├─clock-applet
     ├─crond
     ├─cupsd
    …

init进程是所有进程的父进程,负责管理系统中所有的进程。

上例中,init衍生出automount子进程,automount衍生出一个新的子进程4*[{automount}] ,其中4*表示当前进程有4个线程。有时需要使用这种方式验证网络服务的线程数。

三、实时显示进程命令top

top命令不仅可以实时查看进程占用系统资源的情况,还能够按使用系统资源进行排序,它是目前UNIX/Linux等系统中最为流行的系统性能分析工具。

(1)使用top时,无需使用任何参数和选项:

[root@localhost ~]# top

top - 14:34:45 up  5:52,  3 users,  load average: 0.07, 0.04, 0.01
Tasks: 110 total,   3 running, 106 sleeping,   0 stopped,   1 zombie
Cpu(s):  2.7%us,  3.1%sy,  0.0%ni, 93.9%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    515524k total,   507780k used,     7744k free,   250936k buffers
Swap:  1044184k total,        0k used,  1044184k free,   129148k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                           
 3999 root      15   0 36148  11m 5908 S  2.7  2.3   2:32.22 Xorg                              
 4250 root      15   0 63684  15m 9808 R  2.3  3.1   0:45.10 gnome-terminal
...

top命令显示了一个交互式的页面,命令会实时地更新这个页面,显示进程的PID、用户、CPU占用率等。

top页面的前半部分显示了当前系统的统计信息,第1行显示了top启动的时间,期间登录的用户及负载均衡平均值。3个负载均衡平均值分别显示了过去的1分钟、5分钟和10分钟内系统的负载均衡平均值。

小知识:系统负平均值(也叫负载均衡值)是一个很独特的概念,Linux使用数字标识系统的负载,数字越大表示系统负载越高。在单处理器系统上,如果负载均衡值等于1,表示系统处于满负荷状态,大于1表示系统处于超负荷状态。在多处理器或者多核处理器系统中,满负荷运行状态的负载均衡值应该与CPU数量或处理器核数相等。

第2行是系统中进程统计信息,分别是进程总数、正在运行的进程数、处于休眠的进程数、停止进程数以及僵死进程数。

第3行是CPU使用情况,分别是用户进程占用百分比、系统进程占用百分比、用户改变过优先级的进程占用百分比以及空闲百分比等。

第4行和第5行分别是内存和交换空间使用情况。

top命令后半部分是系统中进程的详细情况,几个新字段及其含义:

PR:进程的优先级。

NI:该进程的优先级值。

VIRT:进程使用虚拟内存总量。

RES:进程使用的物理内存总量。

SHR:进程使用的共享内存大小。

使用top命令后,可以按Q键退出top交互界面。

(2)top运行时,按P(大写字母),将会按CPU使用率由高到低排序显示。

(3)top运行时,按M(大写字母),将会按内存占用率排序。

(4)top运行时,按h可以查看帮助信息。

四、将任务放在后台执行&

使用sleep命令作为示例,该命令产生的进程会在指定的时间内一直处于睡眠状态,直到时间结束,才退出并释放占用的系统资源。如果在前台执行,此命令将会锁住终端直到时间结束。

在执行命令时,可以在命令最后加入符号&(读音与and同),此时系统会将命令或进程放入后台执行。

(1)例如要创建一个sleep进程,持续时间为300秒,并将其切换到后台运行:

[root@localhost ~]# sleep 300 &
[1] 17292
[root@localhost ~]# ps
  PID TTY          TIME CMD
12701 pts/1    00:00:00 bash
17292 pts/1    00:00:00 sleep
17293 pts/1    00:00:00 ps

(2)使用&将命令放在后台执行时,处于后台运行的命令会直接将输出和错误信息输出到控制台。这样非常不方便查看,此时建议使用重定向将命令输出、错误信息输出到文件,以便于事后查看。

五、查看后台任务命令jobs

[root@localhost ~]# sleep 300 &
[1] 17429
[root@localhost ~]# jobs
[1]+  Running                 sleep 300 &

jobs命令输出中[1]代表作业号为1的进程。

使用jobs命令时需要注意,该命令显示的后台任务是用户手动执行的(本需要占用前台的命令),不包含系统运行的后台进程。

六、后台任务调至前台命令fg

fg命令调取任务时,需要使用任务的作业号作为参数。

[root@localhost ~]# sleep 300 &
[1] 17704
[root@localhost ~]# jobs
[1]+  Running                 sleep 300 &
[root@localhost ~]# fg 1
sleep 300

七、终止进程命令kill

【命令格式】

kill –signal PID

signal表示要发送给进程的信号,PID表示进程ID号(可以使用ps命令查看)。

在Linux系统中,可供kill命令使用的信号非常多。可以使用选项l查看这些信号:

[root@localhost ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

命令列出了可以使用的信号及编号。在实际执行命令时,可以使用信号的名称,也可以使用信号编号。

【用法示例】

(1)大多时候,并不需要发送特别的信号,而是以正常方式杀死进程。以正常方式杀死进程时,kill命令将使用信号15,即SIGTERM(使用软件终止的方式)。这种方式会存在一些问题:进程的子进程可能会无法终止,并继续占用系统资源。

[root@localhost ~]# ps
  PID TTY          TIME CMD
17344 pts/0    00:00:00 bash
18035 pts/0    00:00:00 sleep
18036 pts/0    00:00:00 ps
[root@localhost ~]# kill 18035
[root@localhost ~]# ps
  PID TTY          TIME CMD
17344 pts/0    00:00:00 bash
18037 pts/0    00:00:00 ps
[1]+  Terminated              sleep 300
 

(2)如果管理员发现某个进程无法终止,可能的原因是进程已经无法响应。这时可以使用信号9,强制终止无法终止的进程:

[root@localhost ~]# ps
  PID TTY          TIME CMD
17344 pts/0    00:00:00 bash
18094 pts/0    00:00:00 sleep
18095 pts/0    00:00:00 ps
[root@localhost ~]# kill -9 18094
[root@localhost ~]# ps
  PID TTY          TIME CMD
17344 pts/0    00:00:00 bash
18096 pts/0    00:00:00 ps
[1]+  Killed                  sleep 300

从ps命令输出可以看到,使用信号9强制终止进程后,进程会立即被杀死。

注意:强制终止进程并不能杀死所有进程,有时使用强制终止之后,进程仍然没有结束,这是可能需要重新启动系统。

(3)有时需要让一个进程停止执行,这是可以使用信号19挂起进程:

[root@localhost ~]# ps
  PID TTY          TIME CMD
17344 pts/0    00:00:00 bash
18236 pts/0    00:00:00 sleep
18237 pts/0    00:00:00 ps
[root@localhost ~]# kill -19 18236
[root@localhost ~]# ps
  PID TTY          TIME CMD
17344 pts/0    00:00:00 bash
18236 pts/0    00:00:00 sleep
18238 pts/0    00:00:00 ps

[1]+  Stopped                 sleep 300

提示:使用信号19挂起进程后,如果不结束/继续执行挂起的进程,它将会一直存在于系统中,直到系统关闭。

(4)如果要让一个挂起的进程重新运行,可以向其发送信号18:

(5)如果正在运行的任务锁住了终端,用户将无法使用kill命令,此时可以使用快捷键Ctrl+C退出任务。

(6)快捷键Ctrl+Z,会强制将前台进程放入后台,并停止运行。与信号19一样。此时可以使用fg或bg命令,将任务放在前台或者后台继续执行。当然也可以发送18号信号让其继续执行。

八、查看进程优先级

Linux系统中的优先级在-20到19之间,一共有40个优先级,-20表示最高优先级,19表示最低优先级。

查看进程优先级:

[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0 17344 17340  0  75   0 -  1158 wait   pts/0    00:00:00 bash
4 R     0 18876 17344  0  77   0 -  1046 -      pts/0    00:00:00 ps

NI字段就是进程的优先级。从大多数进程使用的优先级可以看出,系统默认的优先级为0.

如果要查看系统中所有进程的优先级,可以使用选项e和f:

[root@localhost ~]# ps -efl
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  75   0 -   511 -      08:42 ?        00:00:01 init 
1 S root         2     1  0 -40   - -     0 migrat 08:42 ?        00:00:00 [mig]
...

九、指定进程优先级命令nice

在Linux系统中,nice命令既可以查看系统默认的进程优先级,也可以设置进程运行的优先级别。

【命令格式】

nice [option] [command]

【常用选项】

n:该选项用于指定程序或命令运行的优先级。

【用法示例】

(1)如果不为nice命令指定任何选项和参数,命令将显示系统默认优先级。

[root@localhost ~]# nice
0

(2)例如要以最低优先级运行脚本exam.sh:

[root@localhost ~]# nice -n 19 ./exam.sh &

十、指定进程优先级命令renice

【命令格式】

renice –n PID

【常用选项】

n:用于指定新优先级。

posted @ 2013-12-12 16:02  ITtecman  阅读(1358)  评论(0编辑  收藏  举报