栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言--wait回收实例及waitpid函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言--wait回收实例及waitpid函数

1,fork后wait回收实例
            WIFEXITED、WIFSIGNALED、WEXITSTATUS这几个宏用来获取子进程的退出状态。
            WIFEXITED宏用来判断子进程是否正常终止(return、exit、_exit退出)
            WIFSIGNALED宏用来判断子进程是否非正常终止(被信号所终止)
            WEXITSTATUS宏用来得到正常终止情况下的进程返回值的。
 
伪代码:

pid_t ret = -1;
int status = -1;
	
printf("parent.n");
ret = wait(&status);  //父进程阻塞等待子进程被回收
		
printf("子进程已经被回收,子进程pid = %d.n", ret);
printf("子进程是否正常退出:%dn", WIFEXITED(status));
printf("子进程是否非正常退出:%dn", WIFSIGNALED(status));
printf("正常终止的终止值是:%d.n", WEXITSTATUS(status));

2,waitpid函数与wait函数的差别

        (1)基本功能一样,都是用来回收子进程
        (2)waitpid可以回收指定PID的子进程
        (3)waitpid可以阻塞式或非阻塞式两种工作模式

3,使用waitpid实现wait的效果部分实例代码解释

        (1) ret = waitpid(-1, &status, 0);      -1表示不等待某个特定PID的子进程而是回收任意一个子进程,0表示用默认的方式(阻塞式)来进行等待,返回值ret是本次回收的子进程的PID
        

        (2)ret = waitpid(pid, &status, 0);        等待回收PID为pid的这个子进程,如果当前进程并没有一个ID号为pid的子进程,则返回值为-1;如果成功回收了pid这个子进程则返回值为回收的进程的PID

        (3)ret = waitpid(pid, &status, WNOHANG);这种表示父进程要非阻塞式的回收子进程。此时如果父进程执行waitpid时子进程已经先结束等待回收则waitpid直接回收成功,返回值是回收的子进程的PID;如果父进程waitpid时子进程尚未结束则父进程立刻返回(非阻塞),但是返回值为0(表示回收不成功)。
    
   

       

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号