在C语言中,可以使用wait()
函数来等待子进程的结束。以下是wait()
函数的调用方法:
c
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t child_pid = fork();
if (child_pid == 0) {
// 子进程代码
// ...
} else {
// 父进程代码
wait(NULL); // 等待子进程结束
}
return 0;
}
在上面的示例中,我们首先使用fork()
函数创建了一个子进程。然后,在父进程中,通过调用wait(NULL)
函数来等待子
进程的结束。当子进程结束时,父进程会从wait()
函数返回。
如果你想获取子进程的退出状态,可以使用wait()
函数的参数来保存子进程的状态信息。例如:
c
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t child_pid = fork();
if (child_pid == 0) {
// 子进程代码
// ...
return 42; // 子进程退出状态为42
} else {
// 父进程代码
int status;
wait(&status); // 等待子进程结束,并保存子进程的状态信息
if (WIFEXITED(status)) { // 子进程正常退出
printf("子进程退出状态:%d\n", WEXITSTATUS(status)); // 打印子进程的退出状态
}
}
return 0;
}
在上面的示例中,子进程通过return 42;
语句返回了退出状态为42。父进程在调用wait(&status)
时,会把子进程的状态
信息保存在status
变量中,并通过WIFEXITED(status)
宏判断子进程是否正常退出。如果子进程正常退出,可以使用
WEXITSTATUS(status)
宏获取子进程的退出状态。
需要注意的是,如果父进程在调用wait()
函数时,子进程还没有结束,则父进程会阻塞等待子进程的结束。