Unix-Linux 编程实践教程 第八章 小结
- 执行程序的函数---execvp()
execvp中的argv是一个指针数组(数组元素为指针),最后一个指针需为NULL;execvp将在环境变量PATH中寻找file。execvp是先擦除当前进程空间的数据,而后再将目标程序代码从磁盘上载入到当前进程空间。
- 复制当前程序到新的进程空间---fork()。进程调用fork(),转到内核,内核进行如下操做:
- 分配新的内存块和内核数据结构
- 复制原来的进程到新的进程
- 向运行进程集添加新的进程
- 将控制权返回给两个进程(在父进程中,fork()返回值不为0,在子进程中fork()返回值为0)
- 等待子进程结束函数---wait()。wait()实际上时阻塞地等待SIGCHILD信号,若是设置了SIGCHILD处理函数,那么会先执行处理函数,再wait()返回。

- exit()->调用由atexit()或on_exit()注册的函数->_exit()。
- _exit()流程:
- 关闭全部文件描述符和目录描述符
- 将该进程的PID设置为init进程的PID
- 若是父进程调用wait,即通知父进程
- 向父进程发送SIGCHILD
- 已经死亡却没有给exi()没有赋值的进程叫作僵尸(zombie)进程
欢迎关注本站公众号,获取更多信息