关键函数及其使用方法
fork()
:
- 作用:用于创建一个新进程,即子进程。子进程是父进程的副本。
- 用法:
pid_t pid = fork();
。返回值:在父进程中返回子进程的PID;在子进程中返回0;如果创建失败返回 -1。
waitpid()
:
- 作用:等待指定的子进程结束,并获取其退出状态。
- 用法:
pid_t waitpid(pid_t pid, int *status, int options);
pid
:指定要等待的子进程的PID。如果pid
为 -1,则等待任何子进程。
status
:一个指向整数的指针,用于存储子进程的退出状态。可以使用宏如WIFEXITED(status)
判断子进程是否正常退出,WEXITSTATUS(status)
获取正常退出的状态值。
options
:通常设为0,表示阻塞等待子进程结束。
核心代码示例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid, wpid;
int status;
// 创建子进程
pid = fork();
if (pid == -1) {
perror("fork");
return 1;
} else if (pid == 0) {
// 子进程代码
printf("子进程 (PID: %d) 正在运行...\n", getpid());
// 子进程执行一些操作后退出
exit(42);
} else {
// 父进程代码
printf("父进程 (PID: %d) 等待子进程 (PID: %d) 结束...\n", getpid(), pid);
// 等待指定的子进程结束
wpid = waitpid(pid, &status, 0);
if (wpid == -1) {
perror("waitpid");
return 1;
}
if (WIFEXITED(status)) {
printf("子进程正常退出,退出状态: %d\n", WEXITSTATUS(status));
} else {
printf("子进程异常退出\n");
}
}
return 0;
}