文章内容摘自与Linux内核完全注释(修正版v1.9.5)5.10.2部分
系统调用waitpid()。挂起当前进程,直到pid 指定的子进程退出(终止)或者收到要求终止该进程的信号,或者是需要调用一个信号句柄(信号处理程序)。如果pid 所指的子进程早已退出(已成所谓的僵死进程),则本调用将立刻返回。子进程使用的所有资源将释放。如果pid > 0, 表示等待进程号等于pid 的子进程。如果pid = 0, 表示等待进程组号等于当前进程组号的任何子进程。如果pid < -1, 表示等待进程组号等于pid 绝对值的任何子进程。 [ 如果pid = -1, 表示等待任何子进程。]若options = WUNTRACED,表示如果子进程是停止的,也马上返回(无须跟踪)。 若options = WNOHANG,表示如果没有子进程退出或终止就马上返回。如果返回状态指针stat_addr 不为空,则就将状态信息保存到那里。
142 int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options)
143 {
144 int flag, code;
145 struct task_struct ** p;
147 verify_area(stat_addr,4);
148 repeat:
149 flag=0;
// 从任务数组末端开始扫描所有任务,跳过空项、本进程项以及非当前进程的子进程项。
150 for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) {
151 if (!*p || *p == current) // 跳过空项和本进程项。
152 continue;
153 if ((*p)->father != current->pid) // 如
Linux内核0.11版本sys_waitpid()函数分析
最新推荐文章于 2024-03-27 22:55:11 发布