20. Linux进程管理

Date:

2018-09-02

进程通信方法:
同一个主机:
  • signal

  • shm

  • semerphor

不同主机:
  • rpc

进程分类
  • 守护进程

    在系统引导过程中启动的进程,和终端无关

  • 前台进程

    跟终端有关,通过终端启动的进程

进程的状态
  • 运行态

  • 就绪态

  • 睡眠态

  • 僵死态

  • 停止态

20.1. 进程管理

进程查看的方法:
  • ps

  • pgrep

  • top

  • htop

  • vmstat

  • glances

  • dstat

20.1.1. ps

用于查看系统当前进程的运行情况

选项和参数
-A

所有进程列出来

-a

和终端无关的所有进程

-u

与用户相关的进程

常用组合方式
  • ps -ef

  • ps aux

  • ps axo

样例:

1[root@zzjlogin backup]# ps aux  |head -n 3
2USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
3root          1  0.0  0.3 125340  3872 ?        Ss   Feb10   0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
4root          2  0.0  0.0      0     0 ?        S    Feb10   0:00 [kthreadd]

user

用户

pid

进程id

%cpu cpu占比 =========== ================= %mem 内存占比 =========== ================= vsz 虚拟内存大小 =========== ================= rss 固定内存大小 =========== ================= tty 终端 =========== ================= stat 状态 =========== ================= R 运行 =========== ================= S 可中断睡眠 =========== ================= D 不可终端睡眠 =========== ================= T 停止 =========== ================= Z 僵死 =========== ================= s 进程领导者 =========== ================= + 前台进程 =========== ================= l 多线程 =========== ================= < 高优先级 =========== ================= N 低优先级进程 =========== ================= start time 启动时间 =========== ================= command 命令 =========== =================

20.1.2. pgrep

选项
-U

仅仅显示特定用户运行的进程

-G

仅仅显示特定用户组运行的进程

-l

显示pid和进程名字

20.1.3. top

ps是相对一个时间点的进程信息,有时候我们需要动态去观察进程状态,就需要top命令了

选项:
-b

批次处理

-n

显示的次数

-d

指定延迟的时间,单位秒

 1top - 02:18:10 up 1 day, 20:51,  1 user,  load average: 0.00, 0.00, 0.00
 2Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie
 3Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 4Mem:   1004348k total,   393252k used,   611096k free,    75484k buffers
 5Swap:  2072572k total,        0k used,  2072572k free,   139700k cached
 6
 7PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8    1 root      20   0 19364 1536 1224 S  0.0  0.2   0:01.26 init
 9    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
10    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
11    4 root      20   0     0    0    0 S  0.0  0.0   0:00.61 ksoftirqd/0
12    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0
13    6 root      RT   0     0    0    0 S  0.0  0.0   0:33.21 watchdog/0
14    7 root      20   0     0    0    0 S  0.0  0.0  10:20.48 events/0
15    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup
16    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper
17    10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns
18    11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr
19    12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm
20    13 root      20   0     0    0    0 S  0.0  0.0   0:02.98 sync_supers
21    14 root      20   0     0    0    0 S  0.0  0.0   0:04.30 bdi-default
22    15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0
23    16 root      20   0     0    0    0 S  0.0  0.0   0:02.89 kblockd/0
24    17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpid
25    18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify
26    19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_hotplug
27    20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_aux
28    21 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_sff/0
29    22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd
30    23 root      20   0     0    0    0 S  0.0  0.0   0:00.01 khubd
31    24 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kseriod
32    25 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md/0
33    26 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md_misc/0
34    27 root      20   0     0    0    0 S  0.0  0.0   0:00.01 linkwatch
35    29 root      20   0     0    0    0 S  0.0  0.0   0:00.10 khungtaskd
36    30 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kswapd0
37    31 root      25   5     0    0    0 S  0.0  0.0   0:00.00 ksmd
38    32 root      39  19     0    0    0 S  0.0  0.0   0:00.00 khugepaged
39    33 root      20   0     0    0    0 S  0.0  0.0   0:00.00 aio/0
40    34 root      20   0     0    0    0 S  0.0  0.0   0:00.00 crypto/0
41    42 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthrotld/0
42    43 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pciehpd

上面内容详解:

第一行:

当前时间 系统启动时间 已经登陆的用户数 系统在1,5,15分钟的负载情况

第二行:

任务的总个数 运行个数 睡眠个数 停止个数 僵死个数

第三行:

us:用户空间cpu占比 sy:系统空间cpu占比 ni:改变优先级的cpu占比 id:系统空闲cpu占比 wa:等待io的cpu占比 hi:硬件中断的cpu占比 si:软件终端的cpu占比

第四行:

total:物理内存总量 free:物理内存空闲大小 userd:物理内存的使用量 buff/cache: 物理内存的buffercache大小

第五行:

totol:交换内存的总大小 free:交换分区的空闲大小 userd: 交换内存的使用大小 avail: 可用内存

命令有:

P:cpu排序 M: 内存排序 T: cpu时间片总占用排序 q: 退出 k: 终止特定进程

表头行:

PID: 进程id USER:用户所属组 PR:进程优先级 NI:nice值 VIRT:进程需要的虚拟内存大小 RES:进程当前使用的内存大小,不包括swap SHR:进程和其他进程共享的内存大小 S:进程的状态 %CPU:cpu占比 %MEM:内存占比 TIME+:cpu使用时间累计

20.1.4. htop

htop是top的增强版本,系统默认是没有安装,在epel源中。

20.1.5. vmstat

1[root@zzjlogin backup]# vmstat
2procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
3r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
42  0      0 495732  15588 292884    0    0    11    20   97  124  0  0 100  0  0
procs:

r: 等待运行的进程个数(队列的长度) b: 处理不可中断睡眠状态进程个数(io阻塞队列长度)

memory:

free: 空闲空间大小 buff: 缓冲空间大小 cache:缓存空间大小

swap:

si: 从swap进入系统的速率 so: 从系统出去到swap的速率

io:

bi: 从磁盘到系统的速率 bo:从系统到磁盘的速率

system:

in: 中断速率 cs: 进程切换速率

cpu:

us: 用户空间cpu占比 sy: 系统空间cpu占比 id: 空闲cpu占比 wa: 等待iocpu占比 st: 被偷走的cpu占比

20.1.6. glances

glances是一款开源命令行系统监控空间,他使用python语言开发,能够监视cpu、负载、内存、 磁盘、网络流量、系统温度等信息。

安装

1yum install glances

glances的使用

glances是分客户端和服务端的,

1# 服务端执行
2glances -s
3# 客户端执行
4glance -c service-ip

20.1.7. dstat

dstat是一个可以拒贷vmstat,iostart,netstat和ifstat这些命令的多功能产品。

常用选项
--top-cpu

显示最占用cpu的进程

--top-bio

显示最占用block io的进程

--top-io

显示最占用io的进程

--top-mem

显示最占用内存的进程

--ipc

显示进程间通信速率

--raw

显示raw套接的相关信息

--tcp

显示tcp套接字相关的数据

--udp

显示udp套接字相关的数据

--unix

显示unixsock接口相关的统计数据

--socket

显示socket信息

20.1.8. kill

进程的管理就是给进程发送特定的信息,来完成对进程的管理控制。

查看信号

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

常用的信号:

全名

简写

数值

描述

SIGHUP

HUP

1

通知进程重读配置文件

SIGINT

INT

2

打断正在运行的进程,相当于ctrl+c

SIGKILL

KILL

9

强行中止正在运行的进程

SIGTERM

TERM

15

安全中止正在运行的进程

SIGSTOP

STOP

19

暂停进程

SIGCONT

CONT

18

继续运行指定的进程

发送信号样例

1[root@zzjlogin backup]# kill -9 3110

20.2. 作业管理

20.2.1. 作业的查看

1[root@zzjlogin backup]# jobs
2[1]+  Stopped                 vim a.txt

20.2.2. 作业控制

  • fg jobid 把特定的作业调回到前台

  • bg jobid 把调往后台的指定的作业启动起来

  • kill jobid 终止特定作业