您的位置:首页 > 大数据 > 人工智能

wait()函数详解

2016-07-21 08:58 369 查看
wait(等待子进程中断或结束)

相关函数 waitpid,fork

表头文件

#include

#include

定义函数 pid_t wait (int * status);

函数说明

wait()会暂时停止目前进程的执行,直到有信号来到或子进程结

束。如果在调用wait()时子进程已经结束,则wait()会立即返

回子进程结束状态值。子进程的结束状态值会由参数status 返回,

而子进程的进程识别码也会一快返回。如果不在意结束状态值,则

参数status 可以设成NULL。子进程的结束状态值请参考waitpid()。

返回值

如果执行成功则返回子进程识别码(PID),如果有错误发生则返回

-1。失败原因存于errno 中。

附加说明

范例

#include

#include

#include

#include

main()

{

pid_t pid;

int status,i;

if(fork()= =0){

printf(“This is the child process .pid =%d\n”,getpid());

exit(5);

}else{

sleep(1);

printf(“This is the parent process ,wait for child...\n”;

pid=wait(&status);

i=WEXITSTATUS(status);

printf(“child’s pid =%d .exit status=^d\n”,pid,i);

}

}

执行

This is the child process.pid=1501

This is the parent process .wait for child...

child’s pid =1501,exit status =5

waitpid(等待子进程中断或结束)

相关函数 wait,fork

表头文件

#include

#include

定义函数 pid_t waitpid(pid_t pid,int * status,int options);

函数说明

waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程

结束。如果在调用wait()时子进程已经结束,则wait()会立即

返回子进程结束状态值。子进程的结束状态值会由参数status 返回,

而子进程的进程识别码也会一快返回。如果不在意结束状态值,则

参数status 可以设成NULL。参数pid 为欲等待的子进程识别码,

其他数值意义如下:

pid0 等待任何子进程识别码为pid 的子进程。

参数option 可以为0 或下面的OR 组合:

WNOHANG 如果没有任何已经结束的子进程则马上返回,不予以

等待。

WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束

状态不予以理会。

子进程的结束状态返回后存于status,底下有几个宏可判别结束情

况:

WIFEXITED(status)如果子进程正常结束则为非0 值。

WEXITSTATUS(status)取得子进程exit()返回的结束代码,一

般会先用WIFEXITED 来判断是否正常结束才能使用此宏。

WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为



WTERMSIG(status) 取得子进程因信号而中止的信号代码,一般

会先用WIFSIGNALED 来判断后才使用此宏。

WIFSTOPPED(status) 如果子进程处于暂停执行情况则此宏值为

真。一般只有使用WUNTRACED 时才会有此情况。

WSTOPSIG(status) 取得引发子进程暂停的信号代码,一般会先

用WIFSTOPPED 来判断后才使用此宏。

返回值

如果执行成功则返回子进程识别码(PID),如果有错误发生则返回

-1。失败原因存于errno 中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: