[Linux]进程的创建和退出

创建进程

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–全局变量,程序错误序号
通过程序错误序号获取错误信息

猜你喜欢

转载自blog.csdn.net/weixin_43962381/article/details/115049666
今日推荐