一、进程相关概念:
进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU,IO,内存,网
络资源等。通过学习Linux系统进程管理来协调多道程序之间的关系,使CPU得到充分的利用。
进程和程序的区别是什么?
进程是一个动态的概念,当用户把一个程序或命令执行起来的时候,才有进程的概念,
系统会自动分配一个编号PID给进程。
程序是一个静态的概念,表现为一个文件
进程的分类:
根据进程与系统终端的关系:
守护进程:在系统引导过程中启动的进程,即跟终端无关的进程。 前台进程:跟终端相关,通过终端启动的进程; 注:守护进程和前台进程可相互转化
根据进程占用资源的多少分为:
CPU密集型:对cpu占用率高的进程 IO密集型:占用磁盘读写高的进程
进程的状态:
进程在被内核调度过程中的状态可分为很多种:
1.运行态:running 进程正在运行中
2.就绪态:ready
3.睡眠态:sleeping
可中断睡眠:interruptible 大部分进程处于此状态,随时可唤醒
不可中断睡眠:uninterruptible
4.僵尸态:zombie 找不到归属的进程,或父进程已不存在
5.停止态:stopped 不可被调度并运行
进程优先级
系统优先级:数字越小,优先级越高
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)
进程内存:
Page Frame: 页框,用存储页面数据,存储Page 4k
LRU:Least Recently Used 近期最少使用算法,释放内存
物理地址空间和线性地址空间
MMU:Memory Management Unit负责转换线性和物理地址
TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址
映射关系的缓存
IPC: Inter Process Communication
同一主机: signal:信号
shm: shared memory
semaphore:信号量,一种计数器
不同主机:socket: IP和端口号
RPC: remote procedure call 远程过程调用
MQ:消息队列,Kafka,ActiveMQ
二、信号操作管理
我们指定同一主机间的程序是通过信号来进行通讯的,那么我们也可以通过发送信号的方式对进程进行管理。
使用kill -l 命令可以查看当前支持的信号类型:
信号的表示方式:
数字表示:1,2,9
完整名称:SIGHUP
简写名称:HUP
常用信号类型有:
SIGHUP:1,无须关闭进程而让其重新读取配置文件,使新配置生效
SIGINT:2,打断正在运行中的进程,相当于Ctrl+c
SIGQUIT:3,相当Ctrl+\
SIGKILL:9,强制杀死正在运行的进程
SIGTERN:15,终止正在运行的进程(kill命令默认信号)
SIGCONT:18,继续运行指定进程
SIGSTOP:19,后台休眠
信道管理命令
kill: 通过PID进程编号向进程发送信号指令,以及显示当前系统可用的信号
如:kill -9 123 强制杀死PID为123的进程
killall: 通过进程名来向进程所有同名进程发送信号指令
如:killall -9 sleep 强制杀死sleep所有同名的进程
pkill: 通过进程名来发送信号指令,支持greo的匹配模式
pkill [options] pattern options: -SIGNAL -u uid 生效者 -U uid 真正发起运行命令者 -t terminal 与指定终端相关的进程 -P pid 显示指定进程的子进程 如:pkill -9 -t tty2 强制杀死tty2终端下的所有进程
三、作业管理(job control)
我们知道,在登录系统后每一个工作进程都是当前bash的子进程,通过作业管理我们可以
实现多个进程同时运行,这里我们要涉及到两个新的名词:前台作业和后台作业
前台作业:通过终端前,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放前端)
作业状态切换:
作用运行一共有三种状态,分别为:前台执行、后台执行与后台休眠(stoped)
jobs命令: 显示当前作业编号以及作业状态
让作业运行于后台:
尚未启动的作业:COMMAND & 运行中的作业:Ctrl+z,后台休眠状态
将后台休眠|运行作业调回前台运行:
fg job_num 将作业在前台运行(foreground)
将后台休眠作业执行后台运行:
bg job_num 将作业在后台运行(background)
关闭后台执行:
fg job_num;ctrl+c kill %job_num
并行运行
同时运行多个进程,提高效率
- 方法1:
利用脚本
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法2:
(CMD1&);(CMD2&);(CMD3&)
方法3:
{ CMD1& CMD2& CMD3& }
执行长时间任务时防止网络中断造成操作中断
方法1:剥离命令与终端的联系,终端中断后进程将转移至1进程上,再恢复
nohup COMMAND &>/dev/null &
方法2:开启一个screen会话,重新进入后screen -r即可恢复
screen;COMMAND;screen -r 恢复