wait()
是 Linux 系统调用中的一个函数,用于父进程等待其子进程结束并收集其退出状态。这个函数是进程间同步的一种方式,常用于父进程需要获取子进程的执行结果或者确保子进程已经正确终止的场景。
当一个进程创建了另一个进程(通常是通过 fork()
系统调用),创建的进程被称为子进程,而创建它的进程被称为父进程。子进程继承了父进程的很多属性,但它们是两个独立的进程。当子进程结束时,它的资源大部分会被系统回收,但是它的退出状态会保留一段时间,直到父进程通过 wait()
或者 waitpid()
等系统调用来获取这个状态。
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
status
是一个指向 int
类型的指针,用于存放子进程退出时的状态信息。wait()
,那么子进程结束后会变成僵尸进程,占用系统资源。wait()
获取子进程的退出码,从而了解子进程的执行情况。wait()
可以作为父进程和子进程之间同步的一种手段。#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid < 0) { // 错误处理
perror("fork failed");
exit(1);
}
if (pid == 0) { // 子进程
printf("I am child process, my PID is %d
", getpid());
sleep(3); // 模拟子进程工作
exit(0); // 子进程退出
} else { // 父进程
int status;
printf("Parent process waiting for child...
");
wait(&status); // 等待子进程结束
if (WIFEXITED(status)) {
printf("Child process exited with status %d
", WEXITSTATUS(status));
}
}
return 0;
}
如果在调用 wait()
时遇到问题,比如父进程没有等到子进程就结束了,可能的原因有:
wait()
。wait()
。wait()
的返回值和 errno
来确定。解决方法:
wait()
。waitpid()
来等待特定的子进程。wait()
的返回值,如果不是预期的子进程 PID,应该处理错误或者继续等待。如果 wait()
返回 -1,表示发生了错误,可以通过 perror()
或者查看 errno
来获取具体的错误信息,并据此进行错误处理。
领取专属 10元无门槛券
手把手带您无忧上云