-
1. 进程的概念
-
1.程序是一段存放在外存中代码的集合
-
2.进程是一个程序动态执行的过程,包括创建,调度,消亡
-
3.进程是一个动态过程(暂时),而程序是静态的(永存)
-
-
2.进程的创建
-
进程的创建
-
进程创建后,系统分配独立的4G空间
-
进程空间分为文本区,数据区,堆区,栈区和内存区
-
-
-
3.进程的调度
-
保障多个任务同时执行(宏观并行,微观串行)
-
调度算法:先来先执行;短作业优先;时间轮转算法
-
pcb块(内核区):保存进程标志符,当前工作路径,保护现场信息,记录位置
-
-
4.进程状态
-
就绪态
-
./a.out 进入就绪态,执行态时间片结束回到就绪态
-
-
执行态
-
CPU调度 进入执行态
-
-
阻塞态
-
执行态输出io事件进入阻塞态,io事件到达进入就绪态
-
-
-
5.进程相关命令
-
ps -aux
-
查看进程状态
-
ps -aux | grep ./a.out
-
-
top
-
根据CPU占有率查看信息
-
-
ps -ef
-
查看当前时刻进程信息
-
-
pstree
-
查看进程之间的关系
-
ps -p 查看所有关系
-
ps -sp +id号 查看ID对应进程关系
-
kill
-
给进程发送信号
-
kill + 进程数字名
-
-
-
-
6.进程创建关系
-
父子进程
-
父进程
-
创建新进程的进程称为新进程的父进程
-
-
子进程
-
被创建的进程称为原进程的子进程
-
to be continue...
-
-
-
-
7.进程相关接口
-
fork
-
pid_t fork(void);
-
功能:通过函数从当前进程克隆一个同名新进程,新进程执行过程是从forkhanshu之后执行 成功父进程返回子进程的pid,子进程返回0
-
一次调用,会返回两次
-
父子进程运行顺序不确定,变量不共享 子进程会复制父进程的0~3g空间和父进程内核中的pcb,但id号不同
-
-
-
-
getpid
-
pid_t getpid(void);
-
获得调用该函数进程的pid
-
-
-
getpid
-
pid_t getppid(void);
-
获得调用该函数进程的父进程pid号
-
-
-
exit
-
void exit(int status);
-
进程结束
-
1. C库函数,结束之前会清理IO缓冲区 2.关闭所有的流及打开的文件 3.执行注册的退出清理函数
-
-
-
atexit
-
int atexit(void (*function)(void));
-
注册一个进程退出前执行的函数,一般做清理工作
-
-
-
-
8.僵尸进程
-
进程执行结束,空间没有被回收
-
子进程运行结束,父进程没有回收子进程空间
-
如何避免产生僵尸进程: 1.可以使用wait或waitpid回收子进程空间 2.让父进程先结束,子进程后结束,产生孤儿进程,由操作系统帮忙回收资源
-
孤儿进程(一般为后台进程):当前进程的父进程结束,当前进程称为孤儿进程,父进程变成systemd(进程组组长)
-
-
9.进程回收
-
wait
-
pid_t wait(int *status);
-
回收子进程空间
-
阻塞等待回收子进程资源状态 实现同步功能
-
-
WIFEXITED(status) 检测进程是否正常结束
-
WEXITSTATUS(status) 获得进程结束时返回的值
-
WIFSIGNALED(status) 检测进程是否被信号杀死
-
WTERMSIG(status) 获得杀死进程的信号编号
-
-