14、怎么创建一个进程?怎么等待子进程的退出(实时检查)?
时间: 2024-12-15 16:18:03 浏览: 4
在Unix/Linux系统中,可以使用fork()和exec()函数来创建一个新的进程。首先,父进程通过fork()创建子进程,这个操作会返回两个进程ID(PID),如果成功则父进程得到子进程的PID,子进程得到0。
创建进程的基本步骤如下:
```c
pid_t pid = fork(); // fork()
if (pid == 0) { // 子进程
// 执行一些命令并可能改变工作目录等
execlp("your_command", "command_name", ...); // 使用execlp替换命令
} else if (pid > 0) { // 父进程
// 等待子进程结束
wait(NULL); // 或者 waitpid(pid, NULL, 0);
}
```
在C语言中,`wait()`或`waitpid()`函数用于等待子进程完成。它们会阻塞当前进程直到子进程终止,并接收其状态信息。`NULL`作为参数通常表示不需要特定的子进程ID。
对于实时检查子进程的退出,可以频繁地使用`waitpid()`或者`poll()`函数检查指定进程的状态。例如:
```c
while (true) {
int status;
if (waitpid(pid, &status, WNOHANG) == -1 && errno != ECHILD) {
// 处理子进程退出的情况
break;
} else if (waitpid(pid, &status, 0) > 0) {
// 子进程已退出,处理状态
}
}
```
这会在每次循环中尝试获取子进程的状态,如果没有新的子进程退出,函数将立即返回。
阅读全文