前言
本文记录的是wait的用法
一、wait函数
二、例程
1.wait()
代码如下(示例):
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char const *argv[])
{
int i = 0, status;
pid_t pid = fork();
if(pid) {
printf("我是父进程! 我的ID是:%d\n", getpid() );
wait(&status);
printf("子进程已经退出!\n");
} else{
printf("我是子进程! 我的ID是:%d\n", getpid() );
sleep(3);
}
return 0;
}
结果如图所示:
子进程等待三秒后结束,然后父进程打印信息
2.子进程退出状态
代码如下(示例):
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int i = 0, status;
pid_t pid = fork();
if(pid) {
printf("我是父进程! 我的ID是:%d\n", getpid() );
wait(&status);
printf("子进程已经退出!\n");
if(WIFEXITED(status)) {
printf("子进程正常退出,退出值为:%d\n" , WEXITSTATUS(status));
} else if( WIFSIGNALED(status) ) {
printf("子进异常退出,被信号杀死:%d\n" , WTERMSIG(status));
printf("退出值为:%d\n" , WEXITSTATUS(status));
}
} else{
printf("我是子进程! 我的ID是:%d\n", getpid() );
sleep(10);
exit(35);
}
return 0;
}
结果如图所示:
3.异常退出
代码如下(示例):
人为结束子进程
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int i = 0, status;
pid_t pid = fork();
if(pid) {
printf("我是父进程! 我的ID是:%d\n", getpid() );
wait(&status);
printf("子进程已经退出!\n");
if(WIFEXITED(status)) {
printf("子进程正常退出,退出值为:%d\n" , WEXITSTATUS(status));
} else if( WIFSIGNALED(status) ) {
printf("子进异常退出,被信号杀死:%d\n" , WTERMSIG(status));
printf("退出值为:%d\n" , WEXITSTATUS(status));
}
} else{
printf("我是子进程! 我的ID是:%d\n", getpid() );
sleep(10);
exit(35);
}
return 0;
}
结果如图所示: