程序(process): 保存在硬盘、光盘等介质中的可执行代码和数据;是静态保存的代码
进程(thread) :在cpu及内存中运行的动态执行的程序代码
进程是程序运行的实例
同一个进程可能对应多个进程(如:同时开几个QQ)
线程: 有时被称为轻量级进程,是程序执行流的最小单位 (在进程中再划分实体)
每个运行中的程序就是一个进程,当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程
进程和线程的区别
它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响(如关掉一个QQ,其它并不会受影响); 而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。
某进程内的线程在其它进程不可见
2)通信:进程间通信:共享内存、信号等;线程间可以直接读写进程数据段(如全局变量)
来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性
3)调度和切换:线程上下文切换比进程上下文切换要块得多
4)在多线程OS中,进程不是一个可执行的实体
子进程和父进程
INIT进程是系统中第一个进程,PID永远为1
#命令& 放在后台运行
PID 进程号
PPID 父进程号码
:#ps aux | grep 2653
:#ps aux | grep 1778
:#bash
:#bash
:#pstree | grep bash
:#exit
:#exit
#ps 查看静态的进程统计信息
a all
u user
x
ax
aux
-e all
-l long (可看到父进程)
-f full
-el
VSZ:virtual memory size
RSS: resident set size
进程的五种状态 #man ps /state
R:run 可运行,随时会访问cpu
S:可中断睡眠,进程在某事发生前无事可做,需要的时候才被唤醒
D:不可中断睡眠,两个进程同时访问同一资源 等待输入输出
T:停止的进程,被挂起的进程
Z:zombie 僵尸进程,不占用任何资源 (一两个不用管,多的话杀死其父进程)
#top 查看动态的进程排名信息
交互模式
P:按%cpu排序
M:按%MEM排序
u :user
k : kiil
空格:马上刷新
-p [PID] 监控某进程号
-u [用户名]/[UID]
-b
:#top -b -n 2 > abc
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: total, used, free, buffers 打算写入磁盘没有写入磁盘的缓存区
Swap: total, used, free, cached 马上进入cpu要写入磁盘的缓存
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
us :user, 用户空间占用CPU的百分比。
sy :内核空间占用CPU的百分比。
ni :nice, 改变过优先级的进程占用CPU的百分比
id :idle , 空闲CPU百分比
wa :waiting , 等待输入输出占用CPU的百分比
hi :Hardware Interrupts, 硬件中断占用CPU的百分比
si :Software Interrupts, 软件中断占用CPU的百分比
st :stolen 偷取的CPU的百分比(如虚拟化)
在这里CPU的使用比率和Windows概念不同
优先顺序和优先级
Linux内核的基本任务是调度进程,每个进程受两个参数影响其调度
优先顺序(priority):内核控制动态变化
值越小越早被cpu执行
用户无法直接调整值的大小
优先级(niceness):固定值,可手工修改
与priority有关,优先级有正负之分(-20—19)
pr(新)= pr(老)+ nice
root 可以设置nice范围(-20—19)
普通用户可以设置nice范围(0—19)
进程控制
#nice 设置新的优先级(新开启的进程)
以新的优先级来启动命令
#nice -n [命令] & 设置nice值为n
#nice –n [命令] & 设置nice值为-n
:#nice -10 cat /dev/zero > /dev/null &
#renice 设置新的优先级(已经存在的进程)
#renice n [命令] 设置nice值为n
#renice -n [命令] & 设置nice值为-n
top命令也可修改进程的优先级: r —> pid —> 优先级
#pgrep = ps | grep
#pstree 以树型结构显示各进程间的关系
-p 列出进程的PID号
作业控制
手工启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号
#cp /dev/cdrom mycd.iso & 制作镜像
[1] 24833
/ \
后台作业号 PID号
#jobs 查看作业
-l list ID
+:最新放到后台的进程
– :仅次于最新放到后台的进程
#fg Move job to the foreground
将处于后台的进程恢复到前台进行,需指定作业
不指定作业号,将恢复有“+”标记的进程
#fg [n]
#bg Move jobs to the background
将后台停止的进程,在后台重新运行
#bg [n]
Ctrl + Z : 将当前进程挂起,即调入后台并停止执行
信号作为进程间通信的一种方式
发送信号的原因:硬件异常、软件状态、终端中断
进程收到信号后采取的行动:终止、忽略信号、挂起
用户常用的信号
1 SIGHUG
SIGHUA:初衷是为了在终端挂断时告诉终端控制进程这个事件,在守护进程中,通常用来重读配置文件
比如重写了 apache 配置文件,想不重起 apache 就让配置生效,可以往 apache 进程发一个 HUP 信号
#kill
-l 列出Linux系统支持的信号种类
#kill -信号代码 PID // kill 命令用来发送信号
取消后台作业
#kill -9 PID
#kill -9 %作业号
#killall 用于终止指定名称的所有进程;而#kill 用于终止指定PID号的进程
#pkill 根据特定条件终止相应的进程 (fuser -k 杀不死的进程用pkill )
-u user
-t tty
:#pkiil -9 -t user
系统监控命令
#free 显示系统的物理内存和交换空间的使用情况
-b -k -m -g
total used free shared buffers cached
Mem:
-/+ buffers/cache:
“-/+ buffers/cache” + “buffers” + “cached” = used
即 内存使用 = 缓存代码 + 进程本身加载的代码
Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。
Buffer:缓冲区,一个用于存储 速度不同步的设备 或 优先级不同的设备 之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
监控硬件的几个命令 ls /usr/bin/*stat
#vmstat
procs ———–memory———- —swap– —–io—- –system– —–cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
#mpstat precess status
15时34分51秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
#iostat 查看系统磁盘I/O统计信息
avg-cpu: %user %nice %system %iowait %steal %idle
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
#ls补齐
#lscpu #lsblk #lsb_release #lspci #lsusb
#uptime 运行时间,登录用户数,cpu平均负载
查看基本硬件信息
cpu信息:/proc/cpuinfo
内存信息:/proc/meminfo
IDE设备信息:/proc/ide
SCSI设备信息:/proc/scsi
#dmidecode 将DMI数据库中的信息解码,以可读的文本方式显示
DMI(Desktop Management Interface) 帮助收集电脑系统信息的管理系统
#ls /var/run/
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140775.htm