linux常用进程及作业管理常用命令

来源:互联网 发布:mac网络恢复 最新 编辑:程序博客网 时间:2024/05/22 04:35

0 目录

  • 目录
  • 进程查询命令
    • 1 命令ps
    • 2 命令top
    • 3 命令htop
    • 4 命令glances
    • 5 命令vmstat
    • 6 命令dstat
  • 使用信号管理进程
    • 1 命令kill
    • 2 命令killall
  • 作业管理
    • 1 命令jobs
    • 2 命令fg
    • 3 命令bg

1 进程查询命令

1.1 命令ps

命令ps,用于显示当前时刻(非动态显示,类似于快照)所有进程状态
格式:ps [options]

它的选项有3种风格,unix风格的选项必须加“-”;BSD风格的不能加“-”;长选项为“–”。
常用选项:

选项 意义 a 查看所有与终端相关1的进程 x 查看所有与终端无关的进程 u 以用户划分来显示进程 -e 显示所有进程,相当于ax -f 显示更完整(full)的格式 -F 几乎同“-f”,多显示了个别字段 -H 以层级结构(hierarchy,这里指进程父子关系)显示各进程 o或-o 自定义显示指定字段

查询结果各字段2:

字段 意义 PID 进程号 TTY 进程所运行在的终端 USER 运行进程的用户 %CPU或C CPU占用比例 %MEM 内存占用比例 VSZ或VIRT 虚拟内存集(Virtual memory size) RSS或RES 常驻内存集3(Resident Size) SHR 共享内存大小 STAT或S 进程状态4 START 开始运行的时间 TIME或TIME+ 进程累积占用CPU的时长 CMD或COMMAND 发起进程的命令 PR 优先级(priority) PPID 父进程号

直接查看效果:

[root@localhost ~]% ps  PID TTY          TIME CMD 2770 pts/1    00:00:00 bash 2976 pts/1    00:00:00 ps 

使用常用选项组合的效果:

[root@localhost ~]% ps auxUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.0  0.1  19352  1548 ?        Ss   16:07   0:02 /sbin/initroot         2  0.0  0.0      0     0 ?        S    16:07   0:00 [kthreadd]root         3  0.0  0.0      0     0 ?        S    16:07   0:00 [migration/0]root         4  0.0  0.0      0     0 ?        S    16:07   0:00 [ksoftirqd/0]……root      2138  0.0  0.0   4064   540 tty2     Ss+  16:08   0:00 /sbin/mingetty /dev/tty2root      2140  0.0  0.0   4064   540 tty3     Ss+  16:08   0:00 /sbin/mingetty /dev/tty3root      2142  0.0  0.0   4064   544 tty4     Ss+  16:08   0:00 /sbin/mingetty /dev/tty4……# 可看到与终端无关的进程TTY字段为“?”# COMMAND字段带中括号的表示是内核发起的线程
[root@localhost ~]% ps -efUID        PID  PPID  C STIME TTY          TIME CMDroot         1     0  0 16:07 ?        00:00:02 /sbin/initroot         2     0  0 16:07 ?        00:00:00 [kthreadd]root         3     2  0 16:07 ?        00:00:00 [migration/0]……
[root@localhost ~]% ps -eFH……
[root@localhost ~]% ps -eo pid,ni,priority,comm | head -5  PID  NI PRI COMMAND    1   0  20 init    2   0  20 kthreadd    3   - -100 migration/0    4   0  20 ksoftirqd/0[root@localhost ~]% ps axo pid,ni,priority,comm | head -5  PID  NI PRI COMMAND    1   0  20 init    2   0  20 kthreadd    3   - -100 migration/0    4   0  20 ksoftirqd/0# 使用“o”或“-o”选项指定显示的字段,如pid、nice值、优先级、发起进程的命令。限于篇幅仅显示前5行

1.2 命令top

命令top,用于动态地查看当前系统上的进程信息(类似windows任务管理器)。

查看效果:

top - 10:47:23 up 30 min,  1 user,  load average: 0.06, 0.03, 0.05Tasks: 134 total,   1 running, 133 sleeping,   0 stopped,   0 zombieCpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stMem:   1012080k total,   351680k used,   660400k free,    31760k buffersSwap:  2031612k total,        0k used,  2031612k free,   120852k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                          2519 root      20   0 15032 1244  936 R  0.3  0.1   0:00.10 top                                                                  1 root      20   0 19352 1540 1228 S  0.0  0.2   0:02.00 init                                                                 2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                                                             3 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/0                                                          4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                          ……

首部内容意义(按位置对应):

当前时间及终端运行时长 登陆至当前系统的用户数 平均负载(load average) 进程总数 处于运行状态的进程数 处于睡眠状态的进程数 处于停止状态的进程数 处于僵尸状态的运行数 用户(user)进程的CPU占用时间比例 内核进程的CPU占用时间比例 用于调整nice值的CPU占用时间比例 空闲(idle)时间比例 等待I/O完成所站CPU时间比例 处理硬中断(hardware interrupt)所占CPU时间比例 处理软中断所占CPU时间比例 虚拟化程序所占CPU时间比例(被视为“偷走”stolen的时间) 内存总大小 内存已用大小 内存空闲大小 内存缓冲区大小 交换内存总大小 交换内存已用大小 交换内存空闲大小 交换内存缓存大小

其中第1行的“平均负载”表示过去1、5、15分钟的平均等待CPU运行的进程队列长度。
首部下方各字段意义见上述表格

显示内容是交互式的,用户可通过快捷键调整、操作显示结果。常用快捷键:

快捷键 意义 s 更改显示内容的刷新时间间隔,默认是3秒 k 终止指定进程(实际就是向指定进程发15号信号) 1 每颗CPU信息分别显示 l 开启或隐藏首行信息(即uptime信息) t 开启或隐藏CPU信息(第2、3行) m 开启或隐藏内存信息(第4、5行) M、T、P 令显示结果按内存占用比例、CPU占用累积时长、CPU占用比例进行排序。默认是按CPU占用比例排序 q 退出 h 查看所有快捷键及功能

常用选项:

选项 意义 -b 每刷新一次就作为一个批次显示在屏幕。默认是在原屏上动态地变动数据 -n 若按批次显示,指定显示多少批

选项很简单,不再示例。

1.3 命令htop

命令htop,升级版top,界面更美观、功能更强大。在光盘上没有,需在epel源下载安装。

效果:
这里写图片描述

这里写图片描述

可使用方向键控制光标选择任意进程,也支持鼠标点击。
这里是默认显示的相关信息,比较常用。其他字段可使用“F2”设置添加与否,且显示格式、颜色也均可调整。很简单,不再列出。

默认显示的内容意义(按位置对应):

CPU占用率;内存占用比例;交换内存占用比例。不同颜色代表不同意义,可使用“F1”查看 总进程数、线程数、处于运行状态进程数;平均负载(意义同top);终端运行时长 各进程相关信息 各控制快捷键,尤其注意“F1”帮助指令

使用“F1”获取各快捷键:

这里写图片描述

快捷键在上述帮助页面均有解释,常用的有(大部分和top相同):

快捷键 意义 u 显示指定用户进程 c 标记进程(被标记的字体会变色) U 解除所有进程的标记 a 指定某进程只能在某cpu上运行(默认可能会在任何CPU上) l 查看指定进程打开的文件 s 显示指定进程发起的系统调用

1.4 命令glances

命令glances,同样用于进程监控。在epel源下载安装。

效果:
这里写图片描述

除了进程信息它还显示了网卡、磁盘、挂载等信息。各字段意义与上述命令结果相同。
快捷键等信息使用帮助“h”查看即可,用法和上述命令差不多,个别不一样,不赘述。

它有两比较好玩的选项,可以把显示结果另存为html(或CSV)格式的文件,然后用浏览器访问。

选项 意义 -o 指定输出格式,可以是html或CSV -f 指定文件保存的路径,参数是目录。它会在该目录下自动创建保存结果的文件 -s,-B 前者为运行在服务器模式;后者为运行服务器模式时,绑定的地址(可理解为监听),它应当是服务器上一个通的地址 -c 以客户端模式运行

选项-o、-f示例:

[root@localhost ~]% glances -f ./glances -o html           # 指定保存目录为当前目录下的glances[root@localhost ~]% firefox ./glances/glances.html         # 它会在指定目录下自动创建glances.html文件,而后就可使用浏览器查看了……

C/S模式示例:
在一主机上执行:

[root@localhost ~]% glances -s -B 192.168.0.131                # 该主机的一个IP为192.168.0.131Glances server is running on 192.168.0.131:61209……

另一主机作为客户端连接(如果是新安装的虚拟机注意看下防火墙):

[root@localhost ~]% glances -c 192.168.0.131               # 访问这个地址,客户端就可远程查看192.168.0.131这台主机上的glances信息了……

1.5 命令vmstat

命令vmstat,man文档说明是用于显示虚拟内存数据,实际也显示了进程等信息。

效果:

[root@localhost ~]% vmstat                     # 直接使用则显示当前时刻的信息 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 0  0      0 383068  54156 224836    0    0    11     1   14   15  0  0 100  0  0   [root@localhost ~]% vmstat 1                   # 可指定刷新时间(秒)一直显示procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 0  0      0 383052  54156 224836    0    0    11     1   14   15  0  0 100  0  0    0  0      0 383020  54156 224836    0    0     0     0   25   21  0  0 100  0  0    0  0      0 383004  54156 224836    0    0     0     0   27   26  0  0 100  0  0……

显示内容分6类:

procs,进程信息 r,等待CPU运行的任务队列长度(实时显示) b,处于不可中断睡眠状态的进程个数 memory,内存信息 依次为交换内存、空闲、缓冲、缓存大小 swap,交换内存信息 si,swap in,数据进入swap中的平均速率(单位kB) so,swap out,数据离开swap中的平均速率(单位kB) io,块设备io信息 bi,block in,从块设备读入数据至内存的平均速率(单位kB) bo,block out,保存数据至块设备的平均速率(单位kB) system,系统级别信息 in,interrupt,每秒中断的次数 cs,context switch,上下文切换速率(进程调度速率) cpu信息 相关字段上面已说明,不再赘述

此外选项“-s”可显示内存的各项统计信息。

[root@localhost ~]% vmstat -s      1012080  total memory       629524  used memory       228284  active memory        ……

1.6 命令dstat

命令dstat,包含上述所有命令的功能,非常强大

效果:

[root@localhost ~]% dstat----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw   0   0  99   0   0   0|  61k 4886B|   0     0 |   0     0 |  41    33   0   0 100   0   0   0|   0     0 |  60B  838B|   0     0 |  36    17   0   0 100   0   0   0|   0     0 |1252B  358B|   0     0 |  34    16……

直接使用该命令,相当于默认使用了选项“-cdngy”。各字段意义不再赘述。

它拥有众多选项满足各查询,下面列出一部分:

选项 意义 -c,-C 显示CPU信息。大写C用于显示指定CPU信息 -d,D 显示磁盘(disk)信息,大写D用于显示指定磁盘信息 -y 系统(system)级别信息,即中断数、上下文切换数 -m 显示内存相关信息 -g 显示内存页进出数据 -s,-S 显示交换内存使用、空闲信息。大写S用于显示指定交换内存信息 -n,-N 显示网卡收、发速率。大写N用于显示指定网卡信息 -p 显示进程相关数据 -r 显示I/O信息(读、写请求) –aio 显示异步I/O信息 –ipc 显示进程间通信信息(消息队列、信号量、共享内存) –tcp 显示tcp连接的信息(包括连接中的各种状态),还可显示其他网络连接信息,部分替代netstat命令功能 –top-cpu 查看消耗CPU资源最多的进程。可统计各种消耗指定资源最多的进程,如内存(mem)、io等等等

也可分批次显示,指定每批时间间隔(delay)和批次数即可(count)。

2 使用信号管理进程

2.1 命令kill

命令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) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+338) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+843) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-758) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-263) SIGRTMAX-1  64) SIGRTMAX

常用信号:

信号编号 意义 1号 SIGHUP,使进程重读其配置文件,但不用重启进程 2号 SIGINT,中止正在运行的进程,“ctrl c”就是发送的这个信号 9号 SIGKILL,强行、立即终止正在运行的进程。一般用于终止不正常工作的进程 15号 SIGTERM,正常地终止正在运行的进程,不指定信号时默认发送的就是这个。会正常地关闭进程(比如会先关闭进程打开的文件等而后关闭进程,比较安全) 19号 SIGSTOP,把指定进程送入后台,该进程即处于停止状态。“ctrl z”发送的就是这个信号 18号 SIGCONT,令送入后台并停止的进程,在后台继续运行(比如大文件的复制操作),以释放终端。但交互式的进程在后台运行也没有意义(比如vim)

向指定进程发送信号,引用信号可用信号完整名称、信号简写(完整名称去掉前面的SIG)、信号编号。
比如,在另一终端执行“ping 127.0.0.1”,在当前终端使用信号中止该进程:

[root@localhost ~]% ps aux | grep ping                         # 查看其进程号root      2458  0.1  0.0 103256   732 pts/1    S+   16:45   0:00 ping 127.0.0.1[root@localhost ~]% kill -s 2 2458                             # 向该进程发送2号信号[root@localhost ~]% kill -s sigint 2458                        # 使用完整名称也一样,可不区分大小写[root@localhost ~]% kill -s int 2458                           # 使用简称也一样[root@localhost ~]% kill -2 2458                               # 也可省略“-s”,直接“-信号”

此外,命令kill也可向后台作业发送信号

2.2 命令killall

命令killall,用于根据指定名称,向相关进程发送信号。

比如httpd启动时,会发起多个进程。若使用命令kill向其发送信号,需逐个发送。
使用命令killall并指定参数为httpd,则会向由httpd启动的所有进程发送信号:

[root@localhost ~]% ps aux | grep httpdroot      2569  0.0  0.3 183912  3856 ?        Ss   16:59   0:00 /usr/sbin/httpdapache    2572  0.0  0.2 183912  2500 ?        S    16:59   0:00 /usr/sbin/httpdapache    2573  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdapache    2574  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdapache    2575  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdapache    2576  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdapache    2577  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdapache    2578  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdapache    2579  0.0  0.2 183912  2484 ?        S    16:59   0:00 /usr/sbin/httpdroot      2629  0.0  0.0 103320   844 pts/0    S+   17:00   0:00 grep httpd[root@localhost ~]% killall -s 2 httpd[root@localhost ~]% ps aux | grep httpd | grep -v grep             # 上面显示的httpd的所有进程均被关闭[root@localhost ~]%

由此,关闭一个服务(通常含多个进程),通常使用命令killall。

3 作业管理

一个或多个进程都可看作一个作业。作业分为:前台(foreground)作业、后台(background)作业。

前台作业为一直占据终端的作业;后台作业为转入后台运行的作业。

后台作业主要是为了释放当前终端,用户可同时运行多个作业(进程)在后台,这样就不会影响用户使用终端操作前台作业(进程)。

上述已说明,19号信号(快捷键“ctrl z”)可把当前进程送入后台(进程状态变为停止);对于尚未启动的作业,只需在命令后加上“&”即可使其启动后就运行在后台。

3.1 命令jobs

命令jobs,用于查看作业。

效果:

[root@localhost ~]% ping 127.0.0.1                         # ping命令PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.096 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.056 ms^Z                                                          # 使用“ctrl z”送入后台[1]+  Stopped                 ping 127.0.0.1                [root@localhost ~]% jobs[1]+  Stopped                 ping 127.0.0.1                # 可看到ping变为后台作业,状态变为停止

再来一个,送入后台:

[root@localhost ~]% ping 192.168.0.131PING 192.168.0.131 (192.168.0.131) 56(84) bytes of data.64 bytes from 192.168.0.131: icmp_seq=1 ttl=64 time=0.078 ms64 bytes from 192.168.0.131: icmp_seq=2 ttl=64 time=0.057 ms64 bytes from 192.168.0.131: icmp_seq=3 ttl=64 time=0.057 ms^Z[2]+  Stopped                 ping 192.168.0.131[root@localhost ~]% jobs                                   # 可看到目前有2个作业在后台[1]-  Stopped                 ping 127.0.0.1[2]+  Stopped                 ping 192.168.0.131

jobs内容各字段意义依次为:

字段 意义 [数字] 作业号,用于标识作业 “+”、“-” 优先级,“+”为高优先级;“-”次之;不带任何符号的最低 发起作业的命令 发起作业的命令

jobs常用选项:

选项 意义 -l 除默认字段,还列出PID -r 列出后台正在运行的作业 -s 列出后台已停止的作业
[root@localhost ~]% jobs -l                                    # 优先级后的字段为进程号[1]-  3199 Stopped                 ping 127.0.0.1[2]+  3210 Stopped                 ping 192.168.0.131

3.2 命令fg

命令fg,用于把后台作业调回到前台运行。

效果:

[root@localhost ~]% jobs -l[1]-  3199 Stopped                 ping 127.0.0.1[2]+  3210 Stopped                 ping 192.168.0.131[root@localhost ~]% fg 1                                   # 把1号作业调回前台运行ping 127.0.0.164 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.172 ms64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.055 ms……

3.3 命令bg

命令bg,用于让处于后台的、停止状态的进程,在后台继续运行。
容易想到,这个作业必须是无需与用户交互的,否则就算在后台运行也无意义(比如vim在后台运行没有意义,虽然有时因为需要可把vim放在后台,但使用时当然还是要调回前台的)。

效果:

[root@localhost ~]% jobs -l [2]-  3210 Stopped                 ping 192.168.0.131[3]+  3256 Stopped                 ping 127.0.0.1[root@localhost ~]% bg                                     # 不指定作业号,默认就是最高优先级的作业 [3]+ ping 127.0.0.1 &64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.218 ms    # 该作业运行了,输出内容到屏幕[root@localhost ~]% 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.055 ms64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.055 ms……

从上述可以看出另一个问题,就是后台作业被唤醒在后台继续运行时,输出内容还是会到屏幕上,影响终端正常使用。
所以,如果期望后台运行某作业,最好把它的输出内容重定向至某文件或/dev/null。

所以命令就要变成:

[root@localhost ~]% ping 127.0.0.1 > /dev/null &[1] 3370[root@localhost ~]% ping 192.168.0.131 > /dev/null &[2] 3373[root@localhost ~]% jobs -l                                    # 可看到它们在后台处于运行状态,且没有输出信息至屏幕[1]-  3370 Running                 ping 127.0.0.1 > /dev/null &[2]+  3373 Running                 ping 192.168.0.131 > /dev/null &

命令kill也可向作业发送信号,对于作业号只需在前加上“%”即可(否则会被认为是进程号)。

上面提到,18号信号也可令后台停止状态的作业继续运行:

[root@localhost ~]% ping 127.0.0.1 > /dev/null^Z[1]+  Stopped                 ping 127.0.0.1 > /dev/null[root@localhost ~]% jobs -l                                        # 后台作业处于停止状态[1]+  3409 Stopped                 ping 127.0.0.1 > /dev/null[root@localhost ~]% kill -s 18 %1                                  # 使用18号信号令其运行[root@localhost ~]% jobs -l[1]+  3409 Running                 ping 127.0.0.1 > /dev/null &

默认信号仍是15号,作用是终止:

[root@localhost ~]% jobs -l[1]+  3409 Running                 ping 127.0.0.1 > /dev/null &[root@localhost ~]% kill %1[root@localhost ~]% jobs -l[root@localhost ~]%

(完)


  1. 进程与终端相关,若终端关闭,则进程也会关闭;无关则没有影响。 ↩
  2. 这里列出的是默认显示的各字段。下面所要说明的很多进程查询命令,它们的默认显示的字段也包含于此表中,所以写在一起了,只是不同命令可能使用的符号不同。
    用于进程查询的各命令有很多字段默认没有被显示,如用户关心需额外显示的,需使用对应命令的选项手动指定(比如ps命令的“o”选项等)。众多默认没有显示的字段具体为何可使用man文档查看,有的也不常用,这里不再列出。 ↩
  3. 内存资源不足时会使用交换内存,但进程的某些关键数据不能移至交换内存,需要常驻在内存中。 ↩
  4. 可使用man查看,常见各进程状态对应的符号:~X23X ↩