进程的基础知识
进程概念
是程序的一次动态执行的过程。(进程存在一个创建、执行、消亡的过程)
进程是程序执行的最小单位,是资源管理的最小单位。
对于资源管理的最小单位的理解:进程是基于操作系统上的操作,操作系统会将真实的物理内存映射成更容易理解的虚拟内存。减少程序员对于物理内存的顾虑。
Linux中进程的结构
进程号(PID):是进程的标识(即进程身份证)
父进程号(PPID):用于记录该进程的上级进程是谁。
包含的三个段:数据段:存放全局变量、常数、动态数据的空间
正文段:存放执行代码的空间
堆栈段:存放程序的局部变量、函数的返回地址、参数
Linux中进程的类型
交互进程(可在前台也可在后台,由shell控制)
批处理进程(不属于某个进程;执行是按照队列的方式(先进先出))
守护进程(后台运行、系统开启时执行、关闭是结束)
Linux中进程运行状态
运行态(正在运行或准备运行)
等待态(可中断或不可中断)
停止态
死亡态(释放了用户空间的内存,但在内核中还存在一个task_struct的结构)
进程的相关函数的基本使用
fork()函数
功能:创建进程;
使用时添加头文件 unistd.h;
参数:无;
返回值:在父进程的fork返回子进程的进程号(是大于0的数),在子进程的fork返回值0,如果返回-1,恭喜你记录了进程的第一个错误
孤儿进程:父进程先于子进程结束;子进程会被systemd收养(systemd是守护进程)
僵尸进程:子进程结束了,而父进程没有回收子进程在内核中的资源。
exit(status)
功能:退出进程;退出时会将IO缓冲区的内容写入文件。
添加头文件:stdlib.h
参数:ststus(该参数是用来记录该进程是以何种方式结束;自然结束是0;非自然结束是其他值)
返回值:无
还有一个和exit差不多的函数_exit,这个函数只是在退出时不会理睬IO缓冲区的内容。
waitpid(pid_t pid, int *status,int options)
功能:回收子进程结束后在内核中的资源
参数:
pid:大于0表示等待指定的子进程结束;等于-1:表示 任何一个进程退出(与wait一样)。
status:是一个整型指针,保存子进程退出时的状态;为NULL表示不保存,不为NULL表示保存。
options:为WNOHANG:表示指定的子进程没有结束,waitpid不阻塞,返回值为0。
为0:表示阻塞父进程,等待子进程退出。