• wait函数与waitpid函数


    1. 通过man命令学习wait和waitpid函数的用法

    图片描述
    图片描述
    图片描述
    图片描述
    wait与waitpid函数头文件与定义

    #include<sys/types.h>
    #include<wait.h>
    pid_t wait(int *wstatus)
    pid_t waitpid(pid_t pid,*wstatus,int options);
    

    wait函数功能:父进程一旦调用wait函数就立即阻塞自己,由wait分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回,如果没有找到,就一直阻塞,直至找到一个结束的子进程或接收到了一个指定的信号为止。
    waitpid函数功能:waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能等。实际上wait()函数只是waitpid()函数的一个特例。

    1. wait函数返回值意义

    Wait()与fork()配套出现,如果在fork()之前调用wait(), wait返回-1,正常情况下,应返回子进程pid。参数wtatus用来保存被收集进程退出时的状态,它是一个指向int类型的指针,如果我们对这个子进程如何结束的不在意,只想把这个僵尸进程消灭掉,就把这个参数置为NULL,即

    pid = wait(NULL);
    

    如果成功返回子进程pid,如果没有子进程,失败,则返回-1。
    如果如果status的值不是NULL,wait把子进程的退出状态取出并存入其中,这是一个整数值(int)它指出了子进程是正常退出还是非正常结束,以及正常结束的返回值,或被哪个信号结束等信息。使用macro来获取这些信息。

    宏定义							描述
    WIFEXITED(wstatus)		如果进程子进程正常结束,返回一个非零值
    WEXITSTATUS(wstatus)	返回子进程退出码;该值由状态参数的最低有效8位组成(仅 	                                          																										                                                   
    				        当WIFEXITED返回值非零时该macro才会被调用)				        
    WIFSIGNALED(wstatus)	如果子进程被一个信号终止,则返回一个非零值
    WTERMSIG(wstatus)	    返回终止这个子进程的信号码(仅当WIFSIGNALED返回值非
    						零时该macro才能被调用)
    WCOREDUMP(wstatus)      如果这个子进程生成了一个核心转储(core dump),返
    						回一个非零值(仅当WIFSIGNALED返回值非零时该macro才
    						会被调用)
    WIFSTOPPED(wstatus)     如果子进程因接收一个信号暂停,返回一个非零值
    WSTOPSIG(wstatus)		返回这个暂停信号的信号码(仅当WIFSTOPPED返回值非零
    						时该macro才会被调用)
    WIFCONTINUED(wstatus)	如果子进程因接收一个信号而恢复运行,则返回一个非零值
    

    编写代码并测试,结果如图所示
    图片描述
    图片描述
    图片描述
    图片描述
    PS:abort()函数功能:立即终止当前进程,产生异常程序终止,此函数将SIGABRT信号发送给调用进程。

  • 相关阅读:
    WordCount
    vs2013安装及测试
    阅读程序,回答问题
    补作业:随机生成二元四则运算
    第一次合作
    漫漫“码农”路
    我的进度条
    Believe
    软件工程个人总结
    结队作业——电梯调度程序
  • 原文地址:https://www.cnblogs.com/w-a-n-s-d-j/p/11827982.html
Copyright © 2020-2023  润新知