文章目录
创建进程
pid_t fork(void)
通过复制父进程创建子进程,父子进程代码共享,资源独有
fork()的返回值:(用于区分父子进程)
父进程,返回子进程的pid,大于0
子进程,返回0
出错时返回-1
pid_t vfork(void)—这种方法用的很少
–创建一个子进程并阻塞父进程,父子进程共用虚拟地址空间
–如果父子进程同时运行会造成栈混乱,所以vfork()阻塞了父进程,让子进程先运行,直到子进程exit退出或者程序替换后,父进程才能继续运行
写时拷贝技术
通过复制父进程创建子进程,所以父子进程一开始映射的是同一块物理内存地址,但是当数据需要发生改变时,则重新为子进程开辟新的空间,将数据拷贝过去
优点:创建子进程的效率高
退出进程
1、main函数中的return
只有main函数中的return可以退出进程,其他地方不可以
2、库函数 void exit(int status)
可以在任意位置调用退出进程,退出前刷新缓冲区
3、系统调用接口 _void exit(int status)
可以在任意位置调用退出进程,不刷新缓冲区
status可以视为进程的退出返回值,即程序的退出原因,保存在pcb中
使用ehco &?命令 可以获取 上一个已退出进程的status值
查看上一次系统调用使用错误的原因
1、void perror(const char* s);
打印一个系统错误信息
const char* s为用户自定义的备注信息,例如:
表示程序运行成功,未出现错误。
2、char *strerror(int errnum);
errnum–全局变量,程序错误序号
通过程序错误序号获取错误信息