苏州网站制作好的公司,十大免费音乐网站,做化学科普网站的目的,网页设计总结体会目录
前言
一、创建进程
二、退出进程 void exit (int retval)
三、进程等待
四、进程替换 前言
提示#xff1a;这里可以添加本文要记录的大概内容#xff1a; 前面我们认识了进程#xff0c;现在让我们认识几个进程的接口 提示#xff1a;以下是本篇文章正文内容…目录
前言
一、创建进程
二、退出进程 void exit (int retval)
三、进程等待
四、进程替换 前言
提示这里可以添加本文要记录的大概内容 前面我们认识了进程现在让我们认识几个进程的接口 提示以下是本篇文章正文内容下面案例可供参考
一、创建进程 接口 pid_t fork(void) 功能通过复制父进程创建一个子进程 返回值对于父进程返回子进程的pid对子进程成功返回0失败返回-1 特点父子进程数据独有、代码共享。 数据独有代码共享 创建一个进程pcb,pcb中有一个指针指向虚拟地址空间(内存指针)指向的所以地址都会同页表映射到物理内存中而代码中的g_val通过映射在物理内存中存储数据当我们创建子进程它就会复制子进程它就会复制父进程(复制了所有的地址映射关系页表若子进程修改g_val的数据那么他会生成一个新的数据放到物理内存中若不修改继续使用父进程的数据)。 目的提高子进程的创建效率、节省了空间内存的申请与大量数据拷贝的过程。 接口 pid_t vfork(void); 创建出了的子进程与父进程共用一个虚拟地址空间与fork相比较少了拷贝提高了效率 缺点 父进程调用vfork创建了子进程后会阻塞、只有等到子进程exit退出或子进程进行了程序替换程序替换后子进程会有自己的虚拟地址空间页表等 二、退出进程 退出进程的三种方法 1在main函数中return 2使用库函数void exit(int retval) 3系统调用接口void_exit(int retval) void exit (int retval) 库函数exit作用在程序退出前刷新缓冲区将缓冲区中数据写入文件中 系统调用接口exit直接释放资源
缓冲区缓冲区是内存空间的一部分当我们进行IO操作的时候不会理解IO要先将数据放到缓 冲区中大量的小的数据累计到缓冲区中当缓冲区满了。就累积成了大数据再进行 IO操作就可以达到一次IO操作就写入了多次IO数据减少了大量的IO操作提高了效率
普通文件和标准输出(显示器设备文件)是不一样的 1.普通文件是全缓冲缓冲区满的时候刷新缓冲区 2.显示器设备文件是行缓冲数据在有换行就会刷新缓冲区 指令echo$? 获取进程返回值
三、进程等待 作用 创建一个子进程后等待子进程的退出获取子进程的退出状态避免僵尸进程的产生 接口 int wait (int *statu); -- 阻塞接口 阻塞为了完成某个操作发起调用。若不具备操作的完成条件则调用一直等待 非阻塞为了完成某个操作发起调用。若不具备操作的完成条件立即报错返回。 功能等待一个子进程退出若当前没有子进程退出一直等待直到成功退出。 返回值返回值大于0代表退出成功表示的是退出子进程的pid出错返回-1 参数int *statu--表示整形空间的地址报错退出子进程的退出状态。 int waitpid (pid_t pid, int *statu, int option); -- 阻塞接口 功能若pid参数设置为-1表示等待任意子进程退出否则就是等待指定子进程退出 参数 pid-1等待任意子进程大于0表示等待指定子进程 statu获取退出子进程的退出状态 option0-默认阻塞操作WNOHANG——非阻塞操作 statu 对于返回值用了一个字节来保存在大多计算机在8位为一个字节int类型是4个字节及32位其中前16位没有用到后十六位中前8位存储的是进程的退出码(进程的退出码只有一个字节)。低8位中的高1位有一个比特位的core dump标志标记是否开启了核心转储功能。 核心转储功能 core dump程序异常退出时保存程序的运行数据。 目的能够进行程序运行崩溃后的事后调试 低7位存储异常退出的信号值(崩溃) 由于一个程序只有正常退出返回值才是有意义的所以问你获取返回退出码时 要先判断进程是否正常退出 判断方法低7位存储的是进程异常退出的信号值低7位为0正常退出非0表示异常 退出 低7位获取方法statu 0x7F 中8位获取(statu 8) 0xFF 判断进程是否正常 接口WIFEXITED(statu) 正常为真否则为假——0为假非0为真 WEXITSTATUS(statu) 提取statu的退出码——宏定义在sys/ait.h头文件中 例printf(statu: %d\n, WEXITSTATUS(statu) ); 四、进程替换 概念替换进程的描述信息让当前进程描述另一个进程(程序的运行过程) 功能让一个进程运行另一个程序 接口 int execve(char* path, char* argv[], char* env[]); 功能程序替换 参数 path一个新的进程的路径名 argv要运行的新程序的运行参数 env要运行的新程序的环境变量 返回值替换成功返回-1失败没有返回值