在C++中,你可以使用<exec>库来处理子进程。这个库提供了一些函数,可以让你创建、运行和管理子进程。下面是一个简单的示例,展示了如何使用<exec>库来执行一个外部命令并获取其输出:
#include <iostream> #include <string> #include <vector> #include <unistd.h> #include <sys/wait.h> int main() { // 要执行的命令,例如:ls -l std::string command = "ls -l"; // 将命令拆分为一个字符串向量 std::vector<std::string> args = {"ls", "-l"}; // 创建一个子进程 pid_t pid = fork(); if (pid == 0) { // 子进程 // 在子进程中执行命令 execvp(args[0].c_str(), args.data()); // 如果execvp执行失败,将返回-1 perror("execvp"); exit(EXIT_FAILURE); } else if (pid > 0) { // 父进程 // 在父进程中等待子进程完成 int status; wait(&status); // 检查子进程是否成功执行 if (WIFEXITED(status)) { std::cout << "子进程已成功执行,退出状态: " << WEXITSTATUS(status) << std::endl; } else { std::cerr << "子进程执行失败" << std::endl; } } else { // fork失败 perror("fork"); return EXIT_FAILURE; } return EXIT_SUCCESS; } 这个示例中,我们首先使用fork()创建一个子进程。在子进程中,我们使用execvp()执行命令。如果命令执行成功,子进程将替换为其自身的内存映像,因此不会返回到原始程序。如果命令执行失败,execvp()将返回-1,并在perror()中打印错误消息。
在父进程中,我们使用wait()等待子进程完成。然后,我们检查子进程的退出状态,以确定它是否成功执行。