c语言如何调用子进程
时间: 2024-10-24 22:06:59 浏览: 28
在C语言中,可以使用标准库中的`fork()`和`exec()`函数来创建并调用子进程。下面是一个基本的步骤说明:
1. **fork()函数**:
- 函数原型:`pid_t fork(void)`
- 它会创建一个新的进程(称为子进程),返回值有以下两个情况:
- 如果是父进程(非0值),返回的是新子进程的PID(进程标识符)。
- 如果是子进程(0值),返回0。
- 子进程复制了父进程的内存状态,包括栈。
2. **exec()系列函数**(如`execl()`, `execle()`, `execv()`, `execvp()`等):
- 这些函数用于替换子进程的整个程序,即启动一个全新的程序。它们接收一个字符串参数,这是要执行的新程序的路径加上参数列表。
- 这意味着一旦调用了`exec*()`,原来的`main()`函数将不再被执行,子进程开始运行指定的程序。
以下是一个简单的例子,展示如何同时使用`fork()`和`execve()`创建并运行子进程:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h> // 包含waitpid()函数
int main() {
int pid; // 存储子进程ID
// 创建子进程
pid = fork();
if (pid == 0) { // 在子进程中
execlp("ls", "ls", "-l", NULL); // 执行"ls -l"命令
perror("Failed to execute command"); // 检查错误
exit(1); // 若执行失败,退出子进程
} else if (pid > 0) { // 父进程
printf("Child process PID is %d\n", pid);
wait(NULL); // 等待子进程结束
} else { // fork失败
perror("Fork failed");
exit(1);
}
return 0;
}
```
在这个例子中,父进程创建了一个子进程,然后子进程执行`ls -l`命令。
阅读全文