多线程相关函数

张开发
2026/4/15 13:18:25 15 分钟阅读

分享文章

多线程相关函数
一、进程号获取函数1.1 getpid函数项目内容头文件sys/types.hunistd.h原型pid_t getpid(void);功能获取当前进程自身的进程号PID参数无返回值返回当前进程自身的进程号类型为pid_t1.2 getppid函数项目内容头文件sys/types.hunistd.h原型pid_t getppid(void);功能获取当前进程的父进程的进程号PPID参数无返回值返回当前进程的父进程的进程号类型为pid_t二、进程退出函数2.1 exit函数项目内容头文件stdlib.h库函数原型void exit(int status);功能正常终止进程在终止前会做一系列的清理工作清理缓存区把缓存区的值输出status 0377按位与运算后的值目的为了拿到status的低八位状态值会被返回给父进程参数status—退出状态值范围0-225给0正常退出非0非正常退出返回值无常量当参数EXIT_SUCCESS等价于0— 成功退出EXIT_FAILURE— 失败退出2.2 _exit函数项目内容头文件unistd.h原型void _exit(int status);功能立即终止进程不执行标准库清理操作status 0377按位与运算后的值会被返回给父进程参数status— 退出状态值返回值无备注_exit是系统调用不依赖EXIT_SUCCESS/EXIT_FAILURE宏但这些宏的值通常为 0 和 1可传递给它使用三、资源回收函数3.1 wait函数项目内容头文件sys/types.hsys/wait.h原型pid_t wait(int *wstatus);功能父进程阻塞等待任意一个子进程结束回收一个子进程资源并通过wstatus获取子进程的退出状态值参数wstatus— 用于存储子进程退出状态值的内存空间首地址• 若为NULL忽略子进程退出状态• 若非NULL将退出状态写入该指针指向的内存通过子进程中的exit函数获取返回值• 成功返回终止子进程的 PID• 失败返回-1并设置errno指示错误原因如调用进程没有子进程3.2 wait函数状态解析宏分类宏说明正常退出WIFEXITED(wstatus)若子进程正常终止调用exit()/_exit()或从main()返回返回trueWEXITSTATUS(wstatus)仅当WIFEXITED为true时使用返回子进程的退出状态码exit(n)中的n取低 8 位信号终止WIFSIGNALED(wstatus)若子进程是被信号终止如SIGKILL等返回trueWTERMSIG(wstatus)仅当WIFSIGNALED为true时使用返回导致子进程终止的信号编号如 9 对应SIGKILLWCOREDUMP(wstatus)仅当WIFSIGNALED为true时使用若子进程终止时产生了核心转储文件返回true信号暂停WIFSTOPPED(wstatus)若子进程是被信号暂停需使用WUNTRACED标志或子进程被跟踪时有效返回trueWSTOPSIG(wstatus)仅当WIFSTOPPED为true时使用返回导致子进程暂停的信号编号如 19 对应SIGSTOP恢复运行WIFCONTINUED(wstatus)若子进程是通过SIGCONT信号恢复运行返回true用于waitpid()配合WCONTINUED标志时先用if判断状态宏属于哪一类然后再用类里面的函数来打印出状态码3.3 waitpid函数项目内容头文件sys/types.hsys/wait.h原型pid_t waitpid(pid_t pid, int *wstatus, int options);功能父进程等待子进程状态变化并获取其状态信息允许精准控制等待的子进程范围可通过options调整等待行为如阻塞/非阻塞参数pid— 指定要等待的子进程•-1等待进程组ID等于|pid|的任意子进程•-1等待任意子进程•0等待进程组ID与调用进程相同的任意子进程•0等待指定PID的子进程wstatus— 存储子进程退出状态的内存地址为NULL则忽略options—标志位默认为0阻塞等待返回值• 成功返回终止子进程的 PID•非阻塞模式下无子进程退出返回0• 失败返回-1并设置errno指示错误原因如调用进程没有子进程PID像身份证号每人唯一PGID进程组ID像家庭门牌号一家人共享同一个门牌号通常为组长的PID概念定义关系特点典型示例父子进程通过fork()创建的进程关系树状结构有明确的层级父进程 → 子进程 → 孙进程进程组一组相关的进程集合扁平结构所有成员平等只有组长特殊管道命令ls | grep | wc3.4 标志位options参数选项常量作用具体行为典型应用场景0实现阻塞等待父进程暂停直到子进程状态变化常规子进程同步等待如批处理WNOHANG实现非阻塞等待若指定子进程未退出函数立即返回0父进程无需阻塞等待父进程需轮询监控子进程状态如后台任务管理WUNTRACED捕获子进程暂停状态当子进程因信号如SIGSTOP停止运行时waitpid返回该子进程 PID调试场景、需处理子进程暂停逻辑的程序WCONTINUED捕获子进程恢复运行状态已停止的子进程通过SIGCONT信号恢复运行时waitpid返回该子进程 PID需跟踪子进程完整生命周期暂停-恢复场景waitpid函数状态解析宏与wait函数状态解析宏一样

更多文章