主要观点:提供了一组用于进程准备和相关操作的函数,包括准备状态机的定义和各种准备、退出、执行新进程等操作的函数实现。
关键信息:
- 定义了准备状态机的枚举类型,包含初始状态、受控终止离开、父进程回收、子进程意外终止等状态。
prepare
函数用于进入准备状态,通过vfork
创建子进程并进行相关设置,返回 0 表示成功,-1 表示失败(如已在准备状态或vfork
失败等)。prepare1
函数在vfork
的子进程中运行,根据vfork
的返回值设置准备状态。prep_exit
函数用于从子进程中退出,设置准备状态为离开并返回僵尸进程的 pid,失败时设置errno
为ECHILD
。prep_execve
函数用于用新的程序图像替换子进程,成功时离开准备状态并返回执行的子进程的 pid,失败时仍在准备状态并返回-1。ispreparing
函数用于判断是否正在进行准备。unprepare
函数用于离开准备状态,释放相关资源并返回子进程的 pid。
重要细节:
- 在
prepare
函数中设置了vfork
上下文,包括堆栈等信息。 - 在不同状态的处理中,会根据
reaper
函数指针进行相应操作,如子进程意外终止时调用reaper
。 - 在
prep_exit
和prep_execve
函数中,都需要先设置准备状态为离开,然后获取上下文并进行相应操作,失败时恢复准备状态为初始状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。