Linux 进程及作业管理(内存、进程和作业命令详解)

Linux 进程及作业管理

  • 进程概念
    • 进程的基本状态
    • 进程之间转换六种情况
  • 进程优先级
    • 进程优先级管理
  • 进程相关概念
    • 1、进程内存
    • 2、IPC(Inter Process Communication:进程间通信)
  • 进程状态
  • 进程信息的相关文件
    • 1、内核状态信息的相关文件
    • 2、相关进程的参数信息
  • 系统管理工具
  • 系统状态查看工具
    • pstree
      • 1、pstree 命令
      • 2、pstree 示例
    • ps(重要)
      • 语法格式
        • 选项有三种风格
        • 启动进程的方式
        • 选项
      • 示例
      • 常用选项组合之一:aux
      • 常用选项组合之二:-ef
      • 常用选项组合之二:-eFH
      • 常用选项组合之二:-eo , axo
    • pgrep / pkill
    • pidof
    • top(重要)
    • uptime
    • htop(重要)
    • vmstat(关键命令)
    • pmap
    • glances
    • dstat (重要)
    • kill
      • 常用信号
      • 示例
    • killall
    • job
    • nice
    • free

进程概念

  • 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

  • Process: 运行中的程序的一个副本,是被载入内存的一个指令集合

    进程ID(Process ID,PID)号码被用来标记各个进程
    UID、GID、和SELinux语境决定对文件系统的存取和访问权限
    通常从执行进程的用户来继承
    存在生命周期
    
  • task struct:Linux内核存储进程信息的数据结构格式

  • task list:多个任务的的task struct组成的链表

  • 进程创建:

    init:第一个进程
    进程:都由其父进程创建,父子关系,CoW
    	fork(), clone()
    

进程的基本状态

  • 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
  • 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态
  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

进程之间转换六种情况

  • 运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
  • 就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
  • 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

以下两种状态是不可能发生的:

  • 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
  • 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

Linux 进程及作业管理(内存、进程和作业命令详解)_第1张图片

进程优先级

系统优先级:数字越小,优先级越高
	0-139(CentOS4,5)
		各有140个运行队列和过期队列
	0-98,99(CentOS6)
		实时优先级: 99-0 值最大优先级最高
		nice值:-20到19,对应系统优先级100-139或99
Big O:时间复杂度,用时和规模的关系
	O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

进程优先级管理

# 进程优先级调整
	静态优先级:100-139
	进程默认启动时的nice值为0,优先级为120
	只有根用户才能降低nice值(提高优先性)
	
# nice命令
	nice [OPTION] [COMMAND [ARG]...]
	
# renice命令
	renice [-n] priority pid...
	
# 查看
	ps axo pid,comm,ni

进程相关概念

1、进程内存

  • Page Frame: 页框,用存储页面数据,存储Page 4k
  • LRU:Least Recently Used 近期最少使用算法,释放内存
  • MMU:Memory Management Unit 负责转换线性和物理地址(物理地址空间和线性地址空间)
  • TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存

2、IPC(Inter Process Communication:进程间通信)

同一主机:signal:信号
	shm: shared memory
	semaphore:信号量,一种计数器

不同主机:socket: IP和端口号
	RPC: remote procedure call
	MQ:消息队列,Kafka,ActiveMQ

进程状态

Linux内核:抢占式多任务

进程类型:
	守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
	前台进程:跟终端相关,通过终端启动的进程
		注意:两者可相互转化

进程状态:
	运行态:running
	就绪态:ready
	睡眠态:
		可中断:interruptable
		不可中断:uninterruptable
	停止态:stopped,暂停于内存,但不会被调度,除非手动启动
	僵死态:zombie,结束进程,父进程结束前,子进程不关闭

进程信息的相关文件

1、内核状态信息的相关文件

/proc/:内核中的状态信息
	内核参数:
		可设置其值从而调整内核运行特性的参数;/proc/sys/
		状态变量:其用于输出内核中统计信息或状态信息,仅用于查看
					
	参数:模拟成文件系统类型

2、相关进程的参数信息

/proc/#:
	#:PID          
		# 里面有此进程的内核参数,内容非常不友好,不是内核开发人员看不懂
	
		# cat cmdline   # 启动此进程的命令参数
		# cat mem        # 查看此进程的内存参数,一般不予许查看
		# cat maps       # 哪些内存空间存储了哪些内容文件

系统管理工具

进程的分类:
	CPU-Bound:CPU密集型,非交互
	IO-Bound:IO密集型,交互

Linux系统状态的查看及管理工具:
	# pstree    ps      pidof    pgrep   top/htop
	# glance    pmap    vmstat   dstat   kill
	# pkill     job     bg       fg      nohup

系统状态查看工具

pstree

以树状图的方式展现进程之间的派生关系。

pstree  - display a tree of processes

1、pstree 命令

pstree命令 以树状图的方式展现进程之间的派生关系,显示效果比较直观。

语法格式:

pstree [OPTIONS]

OPTIONS:
-a           # 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
-c           # 不使用精简标示法
-G           # 使用VT100终端机的列绘图字符
-h           # 列出树状图时,特别标明现在执行的程序
-H PID       # 此参数的效果和指定"-h"参数类似,但特别标明指定的程序
-l           # 采用长列格式显示树状图
-n           # 用程序识别码排序。预设是以程序名称来排序
-p           # 显示程序识别码
-u           # 显示用户名称
-U           # 使用UTF-8列绘图字符
-V           # 显示版本信息

2、pstree 示例

1、获取 SSH 会话的 PID。

# pstree -p | grep ssh

|-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810)
|            `-sshd(2807)---sshd(2808)

从上方的输出中,你可以看到 sshd 进程与分支的树形图。sshd 的主进程是 sshd(1221),另两个分支分别为 sshd(2768) 和 sshd(2807)。

2、显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。

# pstree  -a

3、显示当前所有进程的进程号和进程id。

# pstree -p

ps(重要)

通过查看进程的内核参数来进行友好的输出。

# ps - report a snapshot of the current processes.

Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中。

语法格式

# ps [options]

选项有三种风格

  • 1 UNIX options, which may be grouped and must be preceded by a dash.(例 -A -e)
  • 2 BSD options, which may be grouped and must not be used with a dash.(例 a)
  • 3 GNU long options, which are preceded by two dashes.(如 --help)

启动进程的方式

  • 系统启动过程中自动启动:与终端无关的进程
  • 用户通过终端启动:与终端相关的进程

选项

a                 # 选项包括所有终端中的进程
x                 # 选项包括不链接终端的进程
u                 # 选项显示进程所有者的信息
f                 # 选项显示进程树,相当于 --forest
k|--sort          # 属性 对属性排序,属性前加- 表示倒序
o                 # 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
L                 # 显示支持的属性列表
-C cmdlist        # 指定命令,多个命令用 ,分隔
-L                # 显示线程
-e                # 显示所有进程,相当于-A
-f                # 显示完整格式程序信息        
-F                # 显示更完整格式的进程信息
-H                # 以进程层级格式显示进程相关信息       
-u userlist       # 指定有效的用户ID或名称
-U userlist       # 指定真正的用户ID或名称
-g gid groupname  # 指定有效的gid或组名称
-G gid groupname  # 指定真正的gid或组名称
-p pid            # 显示指pid的进程
--ppid pid        # 显示属于pid的子进程
-M                # 显示SELinux信息,相当于Z

示例

# 查询你拥有的所有进程
ps -x
#显示指定用户名(RUID)或用户ID的进程
ps -fU apache
ps -fU 48
# 显示指定用户名(EUID)或用户ID的进程
ps -fu wang
ps -fu 1000
# 查看以root用户权限(实际和有效ID)运行的每个进程
ps -U root -u root
# 列出某个组拥有的所有进程(实际组ID:RGID或名称)
ps -fG nginx
列出有效组名称(或会话)所拥有的所有进程
ps -fg mysql
ps -fg 27
# 显示指定的进程ID对应的进程
ps -fp 1234
# 以父进程ID来显示其下所有的进程,如显示父进程为1234的所有进程
ps -f --ppid 1234
# 显示指定PID的多个进程
ps -fp 1204,1239,1263
# 要按tty显示所属进程
ps -ft pts/0
以进程树显示系统中的进程如何相互链接
ps -e --forest
# 以进程树显示指定的进程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd
# 要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列
ps -fL -C nginx
# 要列出所有格式说明符
ps L
# 查看进程的PID,PPID,用户名和命令
ps -eo pid,ppid,user,cmd
自定义格式显示文件系统组,ni值开始时间和进程的时间
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
# 使用其PID查找进程名称:
ps -p 1244 -o comm=
# 要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash
# 查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用
ps -C httpd,sshd -o pid=
# 检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx
# 查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
# 显示安全信息
ps -eM
ps --context
# 使用以下命令以用户定义的格式显示安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
# 使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'

常用选项组合之一:aux

选项说明:

a:所有与终端相关的进程
	TIME: 占用内存的时间
	COMMAND:启动此子进程的命令 
	[] 内核线程
x:所有与终端无关的进程
u:以用户为中心组织进程状态信息显示

输出信息:

USER:用户
PID:进程ID
%CPU:使用CPU的百分比
%MEM:使用内存的百分比
VSZ:虚拟内存集;占用的虚拟内存大小
RSS:Resident Size,常驻内存集;
STAT:
	R:running
	S:interruptable sleeping  可中断睡眠
	D:uninterruptable sleeping  不可中断睡眠
	T:Stopped  停止态
	Z:zombie  僵死态,任何进程再被回收前。是一个过渡态,停止到回收之间的过渡态
								
	+:前台进程  运行在终端之上的,占用命令提示符
	l:多线程进程
	N:低优先级进程
	<:高优先级进程
	s:session leader  会话主导者/会话引领者

aux 示例:

# ps aux
USER   PID %CPU %MEM    VSZ   RSS TTY    STAT START   TIME COMMAND
root     1  0.0  0.6 193640  6664 ?      Ss   10:48   0:02 /usr/lib/sys
root     2  0.0  0.0      0     0 ?      S    10:48   0:00 [kthreadd]

常用选项组合之二:-ef

选项说明:

-e:显示所有进程   相当于 ax,但这是 unix 风格的
# ps ax
PID TTY      STAT   TIME COMMAND
  1 ?        Ss     0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
  2 ?        S      0:00 [kthreadd]
# ps -e
PID TTY          TIME CMD
  1 ?        00:00:02 systemd
  2 ?        00:00:00 kthreadd
-f:显示完整格式的进程信息

# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       7615   7607  0 09:04 pts/1    00:00:00 -bash
root       8195   7615  0 09:29 pts/1    00:00:00 ps -f

-ef 示例:

# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 07:18 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --sy
root          2      0  0 07:18 ?        00:00:00 [kthreadd]

进程一般是从 1 开始的,0 代表过渡
	CMD 启动此进程的命令
	TIME 此进程的运行时间

常用选项组合之二:-eFH

选项说明:

-e:显示所有进程   相当于 ax,但这是 unix 风格的
-F:显示完整格式的进程信息
	C: cpu utilization
	PSR:运行于哪颗CPU之上
-H:以层级结构显示进程的相关信息

# ps -eF
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          1      0  0 48410  6696   2 07:18 ?        00:00:02 /usr/lib/systemd/systemd --sw
root          2      0  0     0     0   3 07:18 ?        00:00:00 [kthreadd]

-eFH 示例:

# ps -eFH     # 通过缩进来看进程父子关系
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   3 07:18 ?        00:00:00 [kthreadd]
root       6266      1  0 24140  2464   3 07:19 ?        00:00:00   login -- root
root       7447   6266  0 28859  1984   3 08:29 tty1     00:00:00     -bash
root       6269      1  0 89548 29140   0 07:19 ?        00:00:01   /usr/bin/python -Es /usr/sb
root       6305      1  0 191158 11140  2 07:19 ?        00:00:00   /usr/sbin/NetworkManager --
root       6605   6305  0 26839  5456   3 07:19 ?        00:00:00     /sbin/dhclient -d -q -sf 
root       8072   6305  0 26839  5452   2 09:05 ?        00:00:00     /sbin/dhclient -d -q -sf 
root       6847      1  0 143457 19116  0 07:19 ?        00:00:01   /usr/bin/python2 -Es /usr/s
root       6848      1  0 28189  4320   3 07:19 ?        00:00:00   /usr/sbin/sshd -D
root       7464   6848  0 39154  5536   2 08:29 ?        00:00:00     sshd: root@pts/0
root       7468   7464  0 28860  2072   1 08:29 pts/0    00:00:00       -bash
root       7607   6848  0 39154  5540   2 09:04 ?        00:00:00     sshd: root@pts/1
root       7615   7607  0 28860  2060   1 09:04 pts/1    00:00:00       -bash
root       8295   7615  0 38874  1952   0 10:03 pts/1    00:00:00         ps -eFH
root       7611   6848  0 39154  5536   2 09:04 ?        00:00:00     sshd: root@pts/2
root       7631   7611  0 28860  1992   3 09:05 pts/2    00:00:00       -bash

常用选项组合之二:-eo , axo

选项说明:

o:属性...选项显示定制的信息 pid、cmd、%cpu、%mem
x:选项包括不链接终端的进程
-e:显示所有进程   相当于 ax,但这是 unix 风格的
o	一定要写在后面,因为后面需要带参数
o	field1, field2,...:自定义要显示的字段列表,以逗号分隔

常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
	ppid:父进程进程号	
	ni:nice值; -20~+19 值越小,优先级越高   让出优先级
	priority:priority, 优先级
	rtprio:real time priority,实时优先级

pgrep / pkill

pgrep, pkill 命令主要是实现进程过滤的。

pgrep  pkill - look up or signal processes based on name and other attributes

语法格式:

pgrep [options] pattern
pkill [options] pattern

常用选项:

-u uid             # effective user 生效者,显示指定用户的进程,以谁的身份启动进程的
-U uid             # read user 真正发起运行命令者
-t  TERMINA        # 与指定的终端相关的进程
-l                 # 显示进程名
-a                 # 显示完整格式的进程名
-P pid             # 显示此进程的子进程

示例:

# pgrep -U postfix
7010
7649
# ps aux | grep postfix
root       6994  0.0  0.2  89544  2160 ?        Ss   07:19   0:00 /usr/libexec/postfix/master -w
postfix    7010  0.0  0.4  89716  4092 ?        S    07:19   0:00 qmgr -l -t unix -u
postfix    7649  0.0  0.4  89648  4068 ?        S    09:05   0:00 pickup -l -t unix -u
root       8352  0.0  0.0 112708   972 pts/1    S+   10:14   0:00 grep --color=auto postfix

pidof

pidof命令:根据进程名,取其pid。
按确切的程序名称:/sbin/pidof 进行PID打印。
语法格式:

# pidof bash	

示例:

# pidof sshd
7087 6825

top(重要)

以动态方式实时查看进程信息。

top - display Linux processes

栏位信息显示:

us 用户空间
sy 内核空间
ni 调整ni时间
id 空闲百分比
wa 等待I/O的时间百分比
hi 硬件中断
si 软件中断
st 被虚拟机偷走的时间

top 的内置命令:
在使用top以后,可以使用内置命令进行更细致查看和排序。

排序:
	P:以占据的CPU百分比,%CPU
	M:占据内存百分比,%MEM
	T:累积占据CPU时长,TIME+
首部信息显示:
	uptime信息:l命令
	tasks及cpu信息:t命令
	cpu分别显示:1 (数字)
memory信息:m
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W

命令选项:

-d #         # 指定刷新时间间隔,默认为3秒
-b           # 以批次方式显示
-n #         # 显示多少批次; top -b -n 1 

uptime

  • 显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)。
  • 系统平均负载:指在特定时间间隔内运行队列中的平均进程数。
  • 通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题。
  • 如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用
# uptime 
10:27:58 up 6 min,  1 user,  load average: 0.00, 0.08, 0.06

htop(重要)

安装htop:

# yum -y install epel-release
# yum -y update
# yum install htop

语法格式:

htop [OPTIONS]

常用选项:
-d #            # 指定延迟时间间隔
-u UserName     # 仅显示指定用户的进程
-s COLUME       # 以指定字段进行排序

内置命令:
l               # 显示选定的进程打开的文件列表
s               # 跟踪选定的进程的系统调用
t               # 以层级关系显示各进程状态
a               # 将选定的进程绑定至某指定的CPU核心

vmstat(关键命令)

vmstat - Report virtual memory statistics

语法格式:

vmstat  [options]  [delay [count]]

示例:

[root@LeeMumu ~]# vmstat 2 3   # 每两秒显示一次,显示三次后停止
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
1  0      0 692408   2108 162784    0    0     1     0    6    7  0  0 100  0  0
0  0      0 692364   2108 162788    0    0     0     0   28   29  0  0 100  0  0
0  0      0 692364   2108 162788    0    0     0     0   22   23  0  0 100  0  0

选项:

-s:显示内存统计数据
[root@LeeMumu ~]# vmstat -s
	   995924 K total memory
       139104 K used memory
	    96456 K active memory
        71260 K inactive memory 
       691912 K free memory

输出信息含义:

  • procs(进程)

    r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
     	The number of runnable processes (running or waiting for run time).
    b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
     	The number of processes in uninterruptible sleep.
    		I/O 次数很多的情况下,会造成 b 次数会比较大
    
  • memory(内存)

    swpd:交换内存使用总量;
     	the amount of virtual memory used.
    	 0 代表交换内存未使用
    free:空闲的物理内存总量;
    	the amount of idle memory.
    buffer:用于buffer的内存总量;
    	the amount of memory used as buffers.
    cache:用于cache的内存总量;
    	the amount of memory used as cache.
    

注意:swpd 是物理硬盘虚拟出来的,如果 swap 被启用了,且述职较大时,就需要对内存或服务器进行扩展,因为 swap 性能太差。

  • swap:取时间内的平均值

    si:数据进入swap中的数据速率(kb/s)
    	Amount of memory swapped in from disk (/s) 
    so:数据离开swap的速率(kb/s)
    	Amount of memory swapped in from disk (/s)
    

    注意:如果 swap 的 si 和 so 数值比较大,说明物理内存和虚拟内存在频繁的交换数据,此时需要对 物理内存进行扩容;如果数值不大,则影响较小。

  • io
    如果程序频繁的需要调用数据的话,此数值会比较大。

    bi:从块设备读入数据到系统的速度(kb/s)
    	Blocks received from a block device (blocks/s).
    bo:保存数据至块设备的速率(kb/s)
    	Blocks sent to a block device (blocks/s).
    
  • system

    in:interrupts,中断速率;
    	The number of interrupts per second, including the clock.
    cs:context switch, 上下文 切换的速率;  
    	进程被内核调用的频率  
    	进程多,CPU弱的话,此数值会比较大
    	The number of context switches per second.
    
  • cpu

    us:user space
    	Time spent running non-kernel code.  (user time, including nice time)
    sy:system
    	Time spent running kernel code.  (system time)
    id:idle
    	Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time.
    wa:wait 
    	Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.
    st: stolen
    	Time stolen from a virtual machine.  Prior to Linux 2.6.11, unknown.
    

pmap

报告内存映射表(进程可能使用的是不连续得内存空间,通过映射可获取实际使用的内存位置)。

pmap - report memory map of a process

语法格式:

# pmap [options] pid [...]
	-x:显示详细格式的信息;

示例:

[root@LeeMumu ~]# pmap 1      # 1 号进程所使用的内存映射
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 22
000055d8c0255000   1412K r-x-- systemd
000055d8c05b5000    140K r---- systemd
... ...

另一种查看方式:

# cat  /proc/PID/maps

示例:
# cat  /proc/1/maps

glances

未部署系统监控软件前,glances 是一个比较不错的临时监控服务器的命令。

glances - A cross-platform curses-based monitoring tool

安装:

http://blog.chinaunix.net/uid-777398-id-4776759.html

内建命令:

a Sort processes automatically 
l Show/hide logs
c Sort processes by CPU% 
b Bytes or bits for network I/O
m Sort processes by MEM% 
w Delete warning logs
p Sort processes by name 
x Delete warning and critical logs
i Sort processes by I/O rate 
1 Global CPU or per-CPU stats
d Show/hide disk I/O stats 
h Show/hide this help screen
f Show/hide file system stats
t View network I/O as combination
n Show/hide network stats 
u View cumulative network I/O
s Show/hide sensors stats 
q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats

常用选项:

-b:以Byte为单位显示网卡数据速率
-d:关闭磁盘I/O模块
-m:关闭mount模块
-n:关闭network模块
-t #:刷新时间间隔
-1:每个cpu的相关数据单独显示
-o {HTML|CSV}:输出格式
-f  /PATH/TO/SOMEDIR:设定输出文件的位置

C/S模式下运行glances命令:

服务模式:
	glances  -s  -B  IPADDR				
	IPADDR:本机的某地址,用于监听
					
客户端模式:
	glances  -c  IPADDR
	IPADDR:是远程服务器的地址

dstat (重要)

dstat命令:系统资源统计,代替vmstat,iostat 。

dstat - - versatile tool for generating system resource statistics

语法格式:

dstat [-afv] [options..] [delay [count]]

常用选项:

-c, --cpu:显示cpu相关信息
-C #,#,...,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal
-g:显示page相关的速率数据 
-m:Memory的相关统计数据
-n:Interface的相关统计数据
-p:显示process的相关统计数据
-r:显示io请求的相关的统计数据
-s:显示swapped的相关统计数据
				
--tcp 
--udp
--raw 
-socket 
				
--ipc 
				
--top-cpu:显示最占用CPU的进程
--top-io:最占用io的进程
--top-mem:最占用内存的进程
--top-lantency:延迟最大的进程

示例:

[root@LeeMumu ~]# dstat 2 3  # 每 2 秒显示一次,共显示三次
You did not select any stats, using -cdngy by default.
----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 100   0   0   0|5691B 4278B|   0     0 |   0     0 |  26    31 
 0   0 100   0   0   0|   0     0 |  66B  614B|   0     0 |  43    63 
 0   0 100   0   0   0|   0     0 |  66B  366B|   0     0 |  39    59 
 0   0 100   0   0   0|   0     0 |  96B  366B|   0     0 |  40    61 

kill

用于向进程发送信号,以实现对进程的管理。

kill - terminate a process

显示当前系统可用信号:

# kill -l [signal]
每个信号的标识方法有三种:
	1) 信号的数字标识;  1
	2) 信号的完整名称;  SIGHUP
	3) 信号的简写名称;  HUP
只有管理员才能 kill 任何进程。
[root@LeeMumu ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
... ... 
[root@LeeMumu ~]# kill -l 1
HUP

向进程发信号:

# kill  [-s signal|-SIGNAL]  pid...

常用信号

1)SIGHUP      # 无须关闭进程而让其重读配置文件
2)SIGINT      # 终止正在运行的进程,相当于Ctrl+c
9)SIGKILL     # 杀死运行中的进程;荼毒,残暴杀害   迫不得已使用 9 号,会造成文件损坏
15)SIGTERM    # 终止运行中的进程;人道杀害   一般使用 15 号
18)SIGCONT    # 继续,唤醒
19)SIGSTOP    # 停止状态
  • SIGHUP:控制终端关闭或控制进程退出时,终端会话内的子进程与控制进程的子进程都会收到这样的信号,系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出
  • SIGQUIT:和SIGINT类似, 但由QUIT字符(通常是Ctrl-\ )来控制. 进程在因收到SIGQUIT退出时会产生core文件, 类似于一个程序错误信号
  • SIGTERM:程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL,就是我们有时使用kill -9 pid来强行杀死进程
  • SIGINTERRUPT:程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程

示例

[root@neo ~]# 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	
# ctrl+z 相当于对进程送入到停止状态,相当于发送一个 18 号信号
# fg 可进行对文件进行编辑
[root@LeeMumu ~]# vi abc.txt

[1]+  Stopped                 vi abc.txt
[root@LeeMumu ~]# ps aux | grep vi
root       6205  0.0  0.6  99568  6084 ?        Ss   10:21   0:00 /usr/bin/VGAuthService -s
root       9597  0.0  0.1 126180  1672 pts/1    T    21:34   0:00 vi abc.txt
root       9599  0.0  0.0 112712   972 pts/1    S+   21:34   0:00 grep --color=auto vi

[root@LeeMumu ~]# yum install httpd
[root@LeeMumu ~]# systemctl start httpd.service
[root@LeeMumu ~]# ps aux | grep httpd
root       9541  2.0  0.5 228276  5104 ?        Ss   21:25   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9542  0.0  0.3 228276  2988 ?        S    21:25   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9543  0.0  0.3 228276  2988 ?        S    21:25   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9544  0.0  0.3 228276  2988 ?        S    21:25   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9545  0.0  0.3 228276  2988 ?        S    21:25   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9546  0.0  0.3 228276  2988 ?        S    21:25   0:00 /usr/sbin/httpd -DFOREGROUND
root       9548  0.0  0.0 112708   976 pts/1    S+   21:25   0:00 grep --color=auto httpd
[root@LeeMumu ~]# kill -1 9541
[root@LeeMumu ~]# kill -HUP 9541
[root@LeeMumu ~]# kill -SIGHUP 9541
[root@LeeMumu ~]# kill -s SIGHUP 9541
[root@LeeMumu ~]# killall httpd
[root@LeeMumu ~]# ps aux | grep httpd
root       9611  0.0  0.0 112708   972 pts/1    S+   21:41   0:00 grep --color=auto httpd

# 剩下的这一个进程是 grep 的进程,可以通过如下命令对其进行过滤,可以看出对 httpd 所有进程已 killall
[root@LeeMumu ~]# ps aux | grep httpd | grep -v grep

killall

根据进程名来对进程进行杀死。

killall - kill processes by name

语法格式:

killall  [-SIGNAL]  program

job

前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
	比如: vi cp htop
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);
	比如: 某些服务类进程 httpd

如何让作业运行于后台?

(1) 运行中的作业
	Ctrl+z
	注意:送往后台后,作业会转为停止态;
(2) 尚未启动的作业
	# COMMAND &

注意:此类作业虽然被送往后台,但其依然与终端相关(如果终端中止,与终端相关的进程也会中止)。

如果希望把送往后台的作业剥离与终端的关系:
	# nohup  COMMAND  &

查看所有的作业:

# jobs

可实现作业控制的常用命令:

# fg  [[%]JOB_NUM]:把指定的作业调回前台;
# bg  [[%]JOB_NUM]:让送往后台的作业在后台继续运行; 
	cp 大文件可让其在后台进行复制
# kill  %JOB_NUM:终止指定的作业;   注意 % 不能省略,不然会造成相关进程的 kill,造成系统或程序的崩溃		

nice

可通过nice值调整的优先级范围:100-139  
					htop 里的 PRI 值
			    分别对应于:-20, 19
			        htop 里的 NI 值
			
进程启动时,其nice值默认为0,其优先级是120
nice命令:
	以指定的nice值启动并运行命令
	# nice  [OPTION]  [COMMAND [ARGU]...]
		选项:
			-n NICE
			# nice -n -5 htop  htop 以优先级 -5 启动
						
注意:仅管理员可调低nice值; 普通用户无此权限,可以调高 nice 值
renice命令:
	# renice  [-n]  NICE  PID...
	# renice -n -3 PID
查看Nice值和优先级:
	ps  axo  pid, ni, priority, comm  
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
[root@LeeMumu ~]# htop    # 另外一个终端执行此命令
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
8862   0  20 htop 
[root@LeeMumu ~]# nice -n -5 htop    # 另外一个终端执行此命令
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
8865  -5  15 htop
[root@LeeMumu ~]# renice -n -10 8865
8865 (process ID) old priority -5, new priority -10
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
8865 -10  10 htop

free

查看内存空间使用状态。

free [OPTION]
	-b 以字节为单位
	-m 以MB为单位
	-g 以GB为单位
	-h 易读格式
	-o 不显示-/+buffers/cache行
	-t 显示RAM + swap的总和
	-s n 刷新间隔为n秒
	-c n 刷新n次后即退出

Linux 进程及作业管理(内存、进程和作业命令详解)_第2张图片

你可能感兴趣的:(Linux学习笔记)