曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4946|回复: 0
打印 上一主题 下一主题

[进程] waitpid

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-5-30 18:22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数原型
pid_t waitpid(pid_t pid, int *stat_loc, int options)
所需头文件
#include <sys/types.h>
#include <sys/wait.h>
函数说明
waitpid() 的作用和 wait() 一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的 wati 功能,也能支持作业控制。实际上 wati() 函数只是 waitpid() 函数的一个特例,在 Linux 内部实现 wait() 函数时直接调用的就是 waitpid() 函数。

参数说明
pid=-1 时,waitpid() 等待任何一个子进程退出,这时和 wait() 的作用是一样的。
pid=0 时,等待其组 ID 等于调用进程的组 ID 的任一子进程。
pid<-1 时,等待其组 ID 等于 pid 的绝对值的任一子进程。
pid>0 时,只等待进程 ID 等于 pid 的子进程,不管已经有其他子进程运行结束退出了,只要指定的子进程还没有结束,waitpid() 就会一直等下去。

stat_loc 参数的意义同 wait() 中的一样。

options 参数取 WNOHANG 时,若由 pid 指定的子进程不立即可用,则 waitpid() 不阻塞,此时返回值为0。(此选项比较常用)
options 参数取 WUNTRACED 时,若实现某支持作业控制,则由 pid 指定的任一子进程状态已暂停,且其状态自暂停以来还未报告过,则返回其状态。

函数返回值
正常:子进程的进程号
使用选项 WNOHANG 且没有子进程退出:0
调用出错: -1

测试代码-1
      #include <sys/types.h>
      #include <sys/wait.h>
      #include <unistd.h>
      #include <stdio.h>
      #include <stdlib.h>
      int main()
      {
          pid_t pc, pr;
          pc = fork();

          if(pc<0)
              printf("Error fork.\n");
          else if(pc==0){
              sleep(5);    /* 子进程暂停5s */
              exit(0);     /* 子进程正常退出 */
          }
          else {             /* 父进程 */
              do{          /*循环测试子进程是否退出*/
                  pr = waitpid(pc, NULL, WNOHANG);
                  if(pr==0) {
                      printf("The child process has not exited\n");
                      sleep(1);/*若子进程未退出则父进程暂停1s*/
                  }
              }while(pr==0);
          if(pr==pc)
              printf("Get child %d\n", pr);
          else
              printf("some error occured.\n");
          }
          return 0;
      }
          
运行及输出
beyes@linux-beyes:~/C/call/wait> ./waitpid.exe
The child process has not exited
The child process has not exited
The child process has not exited
The child process has not exited
The child process has not exited
Get child 13116
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-6 09:43 , Processed in 0.084731 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表