进程概念
实行多任务并发执行的一种途径
1 > 进程周期 : 创建态 ,就绪态,执行态,挂起态,死亡态
2 > 进程是计算机资源分配的基本单位 :
系统会给每个进程分配0--4G的虚拟内存 ,0--3G是用户空间,3--4G是内核空间
用户空间分为 : 堆区 ,栈区,静态区
3 > 进程调度机制 : 时间片轮询上下文切换
4 > 并发 与 并行
并发 :针对与单核cpu系统,使用相关的调度机制,实现多个任务进行细化时间片轮询,
同一时刻只有一个任务被cup处理
并行 : 针对多核cup , 每个cup是并行的
真正意义上的任务同时执行
进程的内存管理(重点了解)
1>物理内存 在内存上的
2>虚拟内存 在磁盘上的
3>swap分区 : 硬盘上的分区,当内存不够时会将内存中的某些进程切换进来
4>用户空间 : 每个进程用拥有独立的用户空间
5>内核空间 : 所有进程共享同一内核空间
6>内存映射 : 操作系统会通过内存映射单元(mmu),将物理内存映射出虚拟内存
进程的种类
1>交互进程 : 直接与用户交互 由shell控制 例如vim
2> 批处理进程 : 内部维护了一个队列,被放入的进程会被统一处理 例如 g++一步编译
3> 守护进程脱离终端,随着操作系统启动退出而运行和停止
PID(process ID): 进程号
1> 进程号是大于0的整数值 进程的唯一标识,不可能重复
2>PPID(parent Process ID): 父进程号 , 系统中允许的进程都是拷贝父进程资源得到的
3> liunx 下 /proc目录下数字命名的都是一个进程
特殊的进程
1> 0号进程(idel) :liunx启动后运行的第一个进程(空闲进程)没有其他进程运行时会运行该进程也是1号2号进程的父进程
2> 1号进程(init) : 完成硬件必要初始化工作,收养 孤儿进程
3> 2号进程(kthreadd) : 调度进程 主要完成任务调度问题
4> 孤儿进程 : 当前进程还在运行其父进程已经退出
说明 : 每个进程退出后,其分配的系统资源由其父进程回收,否则会造成资源浪费
5> 僵尸进程 : 当前进程已经退出但是其父进程没有为其回收资源
进程操作的指令
1 > ps : 能够查看但前进程的相关属性
ps -ef : 能够显示进程之间的关系
UID 用户id号
PID:进程号
PPID :父进程号
STIME : 开始运行的时间
TTY :如果是问好表示这个进程不依赖与终端而存在
CMD :名称
ps -ajx : 能够显示进程的状态
PGID : 进程组的ID
SID : 会话组 (哪个终端)
STAT :进程的状态
ps -aux : 查看进程对cup和内存的占有率
2> top : 动态查看进程运行属性
3 > kill : 发送信号的指令
kill -信号号 进程号
kill -l : 查看能够发送的信号有哪些
1,一共62个信号 前32个稳定信号
2,常用的信号
1) SIGHUP : 当进程所在的终端被关闭时,终端会给进程发送信号默认结束进程
2) SIGINT : 中断信号 ,当用户ctrl+c 时发射出来
3) SIGQUIT :退出信号, ctrl +/ 时发送 ,退出进程
9) SIGKILL :杀死指定的进程
11) SIGSEGV : 指针越界访问时会发射,表示段错误
13) SIGPIPE : 当管道破裂时会发射
14) SIGALRM :当定时器超时后会发射
19) SIGSTOP :暂停进程 ,ctrl + z 时会发射
20) SIGTSTP :暂停进程
17) SIGCHLD : 当子进程退出时向父进程发送信号
SIGUSR1 ,SIGUSR2 : 留给用户自定义信号,没有默认操作
3,两个特殊信号 SIGKILL和SIGSTOP 不能被捕获,不能被忽略
4> pidof
pidof 进程名 : 查看进程号
进程状态的切换
1> 进程的状态 man ps
进程主状态:
D : 不可中断的休眠态,通常是IO操作
R : 运行态
S : 可中断的休眠态
T : 停止态
t : 可调式的停止态
W : 已经弃用的状态
X : 死亡态
Z : 僵尸态
附加态 :
< : 高优先级
N : 低优先级
L : 锁在内存里的进程
s : 会话组
l : 包含多线程的进程
+ : 前台运行的进程(输入输出都占用终端)
2> 进程切换
1,如果有停止的进程 jobs -l 查看停止的进程的作业号
2,通过 bg 作业号 实现将停止的进程进入后台运行
3,通过fg 作业号 实现后台作业切换到前台
4,直接把程序放在后台 ./程序 + &
准备的程序:
运行 ,打开另一个终端
可以看到S+运行态,发送信号让他暂停 (因为程序是主要是输出和sleep为休眠态)
kill -SIGSTOP 4793
状态变了
执行bg + 任务号 继续执行
bg 1
变为S态了
要让他变成前台运行执行 fg + 作业号
fg 1
./a.out & 直接在后台运行
./a.out &
3 > 进程的5态图