进程
1.进程的概念
进程是进行中的程序,是程序的一次执行过程,是程序的一个实例./a.out
进程 = pcb + 进程实体(text|data|bss|堆|栈)
2.进程的状态:
3个状态,就绪→执行态→阻塞(等待,睡眠)基本操作系统
linux中的状态,运行态,睡眠态,僵尸,暂停态。
进程的调度:内核主要功能之一就是完成进程调度:宏观并行,微观串行
Linux中进程的状态主要有以下几种:
D:不可中断睡眠状态,通常是因为IO操作。
R:就绪状态,在就绪队列中等待CPU调度。
S:可中断睡眠状态,等待某个事件完成。
T:停止状态,收到停止信号或正在被跟踪。
Z:僵尸状态,进程已终止但未被父进程回收。
3.进程和程序的区别
程序(硬盘)--(./a.out)--> 进程(内存)
程序——>静态——>硬盘
进程——>动态——>内存
一个程序可以有多个进程
4.Linux下进程的相关命令
(1)ps aux | grep 程序名(a.out):查看某个进程的pid号及状态信息
(2)ps -elf | grep 程序名(a.out):查看父子进程,包括pid,ppid
(3)pstree -sp pid号:查看父子进程之间的关系
(4)kill:给进程发信号,kill -l查看kill的所有信号,常用信号有kill -9 pid号:终止进程
kill -19 pid号:暂停进程,kill -18 pid号:继续进程,
当一个进程暂停后又继续,会从前台进程变成后台进程,用ps查看会发现失去了'+'号,此时进程无法用ctrl + c终止,只能用kill -9 pid号终止
(5)killall:给所有进程发信号,可以指定名称
(6)getpid():获得pid号
5.进程编程:
(1)创建进程,为了实现多任务,fork()创建,pid_t fork(void),父进程返回子进程的pid号,子进程返回0;
(2)进程的执行;
(3)进程结束(僵尸态);
(4)进程的资源回收;
6.父子进程之间的关系
父子进程间数据相互独立,互不影响
父子进程的调度顺序不确定,取决于操作系统