进程控制:
进程控制包括1. 进程创建, 2. 进程终止, 3. 进程等待 4.进程程序替换
进程创建
- fork
int fork(void) ; 创建子进程
返回值:
成功: 返回两次
大于0: 返回给父进程逻辑
等于0: 返回给子进程逻辑
失败: 返回 -1
子进程拷贝父进程的PCB;
- vfork:
int vfork(void)
功能:创建子进程的接口
创建出来的子进程拷贝部分父进程的PCB, 和父进程共用同一个虚拟地址空间; 如果父子进程同时并行运行 有可能导致调用栈混乱的问题,
vfork解决方案:
让子进程先运行, 子进程运行完毕后,再让父进程运行
vfork函数创建子进程已经被淘汰了
进程终止:
1. 含义: 进程终止的含义就是一个进程的退出
2. 场景:
2.1 程序跑完了所有的代码, 从main函数退出
main函数代码执行完毕, 结果正确
main函数代码执行完毕, 结果错误
2.2 程序没有跑完所有代码, 程序崩溃掉了
3. 退出的方式:
3.1 main函数的return返回;
3.2 exit函数:(库函数);
退出码:
函数在退出的时候, 返回的值;
来源于main函数的返回值,
或者exit的参数;
3.3 _exit函数:(系统调用)
exit函数比_exit函数多两个步骤终止进程:
第一步: 执行自定义处理函数
int atexit(void(*function)(void));
参数是一个函数指针, 可以接收没有返回值, 没有参数的函数地址
作用: 调用atexit函数, 将参数传入的函数地址告诉内核. 当程序员需要退出的时候, 才调用传入的函数; 这样的函数叫做回调函数;
void func(void)
int main(){
atexit(func);
printf("xxx\n"<