wait,waitpid学习测试

wait,waitpid学习测试

任务详情

1 用man wait, man waitpid学习wait waitpid的使用
2 写出wait 的测试代码,要能说明你理解了wait 的返回值的每一位的含义

实验步骤

1.用man wait, man waitpid学习wait waitpid的使用

使用man 2 wait可以看到函数原型,其中可以看到在2.6版本中新增叫了waitid()函数。
可以看到函数头文件:

#include <sys/types.h> /* 提供类型pid_t的定义 */
#include <sys/wait.h>



wait()函数功能:wait()函数使父进程暂停执行,直到它的一个子进程结束为止,该函数的返回值是终止运行的子进程的PID. 参数status所指向的变量存放子进程的退出码,即从子进程的main函数返回的值或子进程中exit()函数的参数。如果status不是一个空指针,状态信息将被写入它指向的变量。
waitpid函数功能:waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能等。实际上wait()函数只是waitpid()函数的一个特例。

2.写出wait 的测试代码,要能说明你理解了wait 的返回值的每一位的含义

宏定义描述:
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):如果子进程因接收一个信号而恢复运行,则返回一个非零值

测试代码1:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
main()
{
        pid_t pc,pr;
        pc=fork();

        if(pc<0) /* 如果出错 */
               printf("error ocurred!/n");
          else if(pc==0){ /* 如果是子进程 */
                   printf("This is child process with pid of %d\n",getpid());
                   sleep(10); /* 睡眠10秒钟 */
                 }
           else{ /* 如果是父进程 */
              pr=wait(NULL); /* 在这里等待 */
              printf("I catched a child process with pid of %d\n",pr);
          }
       exit(0);
}


测试代码2:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
main()
{
       int status;
       pid_t pc,pr;

        pc=fork();
        if(pc<0) /* 如果出错 */
               printf("error ocurred!\n");
        else if(pc==0){ /* 子进程 */
               printf("This is child process with pid of %d.\n",getpid());
               exit(3); /* 子进程返回3 */
        }
        else{ /* 父进程 */
               pr=wait(&status);
               if(WIFEXITED(status)){ /* 如果WIFEXITED返回非零值 */
                       printf("the child process %d exit normally.\n",pr);
                       printf("the return code is %d.\n",WEXITSTATUS(status));
               }else /* 如果WIFEXITED返回零 */
                   printf("the child process %d exit abnormally.\n",pr);
        }
}

原文地址:https://www.cnblogs.com/j1551163790/p/11830059.html

时间: 2024-12-18 01:22:03

wait,waitpid学习测试的相关文章

收藏学习测试论坛,网站

一.背景   最近想了解测试知识,学习测试知识,所以在网上收集整理关于一些国内,国外的测试网站.   二.国内测试网站 测试之道:http://www.testtao.com/portal.php 说明:里面也很多资料,干货 测试窝:https://www.testwo.com 说明:经常也会公布一些与软件测试有关的活动信息 新锐测试人垂直内容博客社区 DiggerPlus: http://www.diggerplus.org 51se软件测试部落——中国软件测试者的乐园:http://www.

Mysql数据库事务及隔离级别学习测试

参考了这篇文章的一些内容: http://xm-king.iteye.com/blog/770721 我在springdemo库里面建了一个表: CREATE TABLE `tx` ( `id` bigint(11) NOT NULL auto_increment, `num` bigint(11) default 0 COMMENT '用户名', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 CO

学习测试脚本编写(一)

verilog中,一般input默认为wire型,output信号可以是wire型,也可以是reg型(在always或initial中被赋值):inout是双向信号,一般将其设为tri型,表示其有多个驱动源: 测试脚本编写步骤:1.例化 2.激励 3.结果 在测试脚本中,input—>reg output—>wireinout—>wire 1.时钟信号产生 方法1:parameter PERIOD = 20; initial begin clk = 0; forever #(PERIOD

学习测试:外键

--=======测试:外键=========-------=======Auther:Su=========-------=======Time:2015-06-26===----- --=========================-------*******理论知识**********-------=========================-------新增表时加外键:foreign key(列名) references 引用外键表(列名)ON DELETE NO ACTION

oracle_job进程相关学习测试

Oracle cjq0进程测试 测试流程: 1.CJQ进程不存在 2.模拟问题处理 3.问题总结 一.问题现象 CJQ0进程不存在 [[email protected] ~]# ps -ef|grep cjq root 4741 4675 0 11:36 pts/6 00:00:00 grep cjq [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sun Jul 28 1

html5学习测试

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- 4秒后自动转去相应网址 --> <!-- <meta http-equiv

php学习测试题目

<?php     header("content-type:text/html;charset=utf-8");   /*    1.银行给客户每天万分之四的利率,本金100万,存入10年;收入多少()    $money = 1000000;//固定值   for($i = 1 ;$i<3650;$i++){       $money += $money*0.0004;   }   echo $money;   */ /*   2.求出1-100所有的素数   for(

mycat 1.6 配置【仅学习测试配置使用】

jdk 自行配置 mycat 1.6 点击下载 配置文件 schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="

windows 线程同步学习测试-1

环境win7旗舰64位系统,vs2013,AMD fx™4100 Auad-core processor ,8G内存, 看<windows核心编程>线程同步一章,看到有说g_x++会不同步的问题,试着写些代码加深印象.发现+1太快了,看不出效果,于是for循环了1亿次.代码如下: #include "stdafx.h" using std::cout; using std::endl; using std::cin; unsigned __stdcall ThreadFun