Linux--进程创建
进程创建
写时拷贝(时间换空间)
- 更新页表项权限为只读----子进程写入----触发系统错误
- 系统缺页中断,系统开始检测,系统判断写入区域是数据区还是代码区,如果是代码区就终结进程,如果是数据区就进行写时拷贝。
- 写时拷贝:申请内存,发生拷贝,修改页表,恢复执行,恢复权限
为什么要拷贝而不是更改?写入操作 != 对目标区域进行覆写操作,比如 count++
进程终止
mian函数的返回值,是给父进程和系统的
echo $?查看进程错误码
退出码通常表明错误原因
0:成功
非零:错误
退出码表
进程终止的方法
1main 函数 return
2 exit 在代码的任何地方,表示进程结束
3 _exit
exit和_exit的区别
1 刷新缓冲区的问题
exit 属于3号手册 库函数
_exit属于2号手册 系统调用
2 上下层关系
缓冲区,语言级缓冲区 ----C/C++提供的
_exit 直接终止,所以不会刷新
进程等待
一般而言,父进程创建子进程,父进程就要等待子进程,知道子进程结束,等待的时候,子进程不退出,父进程就要阻塞在wait函数内部
1.回收子进程的僵尸状态
waitpid
等待子进程的pid 进程退出码(32个比特位)