【Linux】进程控制2——进程等待(wait&&waitpid)
在Linux系统中,wait()
和waitpid()
函数用于控制进程的执行流程,使得父进程等待一个特定的子进程结束后才能继续执行。
wait()
函数用于等待任何一个子进程结束,并获取子进程结束时的状态信息。waitpid()
函数则提供了更多的选项,如等待特定的子进程或者设置等待的行为(如非阻塞等待)。
以下是使用wait()
和waitpid()
的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
// 错误处理
perror("fork failed");
exit(EXIT_FAILURE);
}
if (pid > 0) {
// 父进程
int status;
pid_t child_pid;
// 等待任何一个子进程结束
child_pid = wait(&status);
if (child_pid == -1) {
// 错误处理
perror("wait failed");
exit(EXIT_FAILURE);
}
printf("Child process %d terminated with status %d\n", child_pid, WEXITSTATUS(status));
} else if (pid == 0) {
// 子进程
printf("I am the child process, PID: %d\n", getpid());
sleep(5); // 休眠5秒
return 5; // 正常结束,返回值为5
}
return 0;
}
在这个例子中,父进程使用wait()
函数等待任何一个子进程结束,并打印出子进程的ID和退出状态。
如果需要使用waitpid()
,可以替换wait()
调用,例如:
pid_t child_pid = waitpid(pid, &status, 0);
这里pid
是要等待的子进程ID,如果为-1,则等待任何子进程,status
用于存储子进程的退出状态,最后一个参数0表示阻塞等待。
非阻塞等待可以设置为WNOHANG:
pid_t child_pid = waitpid(pid, &status, WNOHANG);
在这种情况下,如果指定的子进程尚未结束,waitpid()
会立即返回0,而不是阻塞等待。
评论已关闭