免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7881 | 回复: 3
打印 上一主题 下一主题

进程编程,waitpid返回值请教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-19 22:53 |只看该作者 |倒序浏览
e <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
        pid_t pid;
        int ret;
        if((pid=fork())<0){
                perror("fork");
                exit(1);
        }
        if(pid == 0){
                raise(SIGSTOP);
                exit(0);
        }
        else{
                printf("pid=%d\n",pid);
                if((waitpid(pid,NULL,WNOHANG))==0){
                        if((ret=kill(pid,SIGKILL))==0)
                                printf("kill %d\n",pid);
                        else{
                                perror("kill");
                        }
                }
        }
}

在父进程里面有((waitpid(pid,NULL,WNOHANG))==0)感到迷惑,在父进程里面返回0,有点不解

论坛徽章:
0
2 [报告]
发表于 2008-06-20 00:44 |只看该作者
man waitpid
       waitpid(): on success, returns the process ID of the child whose  state
       has  changed; on error, -1 is returned; if WNOHANG was specified and no
       child(ren) specified by pid has yet changed state, then 0 is  returned.

论坛徽章:
0
3 [报告]
发表于 2008-06-20 22:31 |只看该作者

回复 #2 scutan 的帖子

NULL表示不接收子进程的返回,WNOHANG是如果没子进程退出,也立刻返回。   
  waitpid如果出错返回-1,如果没子进程退出,返回0,如果有子进程退出,返回子进程号。
以上是网上查到的,没子进程退出,返回0,(但一个朋友给出的解释是:有两种情况,一种父进程退出了,返回PID值,另外一种子进程,退出返回0)我觉得朋友解释是错的,这个程序用这个((waitpid(pid,NULL,WNOHANG))==0)这样做的目的是什么?难道是父进程可以定期轮询子进程的状态?

[ 本帖最后由 wgqjjq 于 2008-6-20 22:34 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-06-21 00:38 |只看该作者

回复 #3 wgqjjq 的帖子

你朋友解释是错的,此处的waitpid的作用就是选择你子进程的返回,如果此时子进程已经退出了,那么waitpid将返回子进程的进程号,但是如果此时子进程没有退出,由于有WNOHANG这个标志,则父进程不用等待子进程的退出,就直接返回0了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP