新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 进程控制开发之:Linux进程控制编程

进程控制开发之:Linux进程控制编程

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257131.htm

3)waitpid()使用实例。

由于wait()的使用较为简单,在此仅以waitpid()为例进行讲解。本例中首先使用()创建一个子进程,然后让其子进程暂停5s(使用了sleep())。接下来对原有的父进程使用waitpid(),并使用参数WNOHANG使该父进程不会阻塞。若有子进程退出,则waitpid()返回子进程号;若没有子进程退出,则waitpid()返回0,并且父进程每隔一秒循环判断一次。该程序的流程图如图7.5所示。

图7.5waitpid示例程序流

该程序源代码如下所示:

/*waitpid.c*/

#includesys/types.h>

#includesys/wait.h>

#includeunistd.h>

#includestdio.h>

#includestdlib.h>

intmain()

{

pid_tpc,pr;

pc=();

if(pc0)

{

printf(Errorn);

}

elseif(pc==0)/*子进程*/

{

/*子进程暂停5s*/

sleep(5);

/*子进程正常退出*/

exit(0);

}

else/*父进程*/

{

/*循环测试子进程是否退出*/

do

{

/*调用waitpid,且父进程不阻塞*/

pr=waitpid(pc,NULL,WNOHANG);

/*若子进程还未退出,则父进程暂停1s*/

if(pr==0)

{

printf(Thechildprocesshasnotexitedn);

sleep(1);

}

}while(pr==0);

/*若发现子进程退出,打印出相应情况*/

if(pr==pc)

{

printf(Getchildexitcode:%dn,pr);

}

else

{

printf(Someerroroccured.n);

}

}

}

将该程序交叉编译,下载到目标板后的运行结果如下所示:

$./waitpid

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Thechildprocesshasnotexited

Getchildexitcode:75

可见,该程序在经过5次循环之后,捕获到了子进程的退出信号,具体的子进程号在不同的系统上会有所区别。

读者还可以尝试把“pr=waitpid(pc,NULL,WNOHANG);”这句改为“pr=waitpid(pc,NULL,0);”或者“pr=wait(NULL);”,运行的结果为:

$./waitpid

Getchildexitcode:76

可见,在上述两种情况下,父进程在调用waitpid()或wait()之后就将自己阻塞,直到有子进程退出为止。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 4 5 下一页

评论


相关推荐

技术专区

关闭