在Mac系统下,可以使用C++的标准库和POSIX系统调用来创建子进程。下面是一个简单的示例程序,可以创建一个子进程并在子进程中执行另一个程序:

#include <iostream>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    pid_t pid = fork(); // 创建子进程
    if (pid == 0) {
        // 子进程中执行的代码
        std::cout << "This is the child process." << std::endl;
        execl("/bin/ls", "ls", "-l", nullptr); // 执行ls -l命令
        // 如果execl返回了,说明发生了错误
        std::cerr << "Error executing ls -l." << std::endl;
        exit(1); // 退出子进程
    } else if (pid > 0) {
        // 父进程中执行的代码
        std::cout << "This is the parent process." << std::endl;
        int status;
        waitpid(pid, &status, 0); // 等待子进程结束
        std::cout << "Child process terminated with status " << status << "." << std::endl;
    } else {
        // fork失败
        std::cerr << "Failed to fork." << std::endl;
        return 1;
    }
    return 0;
}

在上面的程序中,fork()函数创建了一个新的子进程,if语句用于判断当前代码是在父进程还是在子进程中执行。如果pid为0,说明当前代码正在子进程中执行,此时使用execl()函数来执行ls -l命令,并在执行完成后退出子进程。如果pid大于0,说明当前代码正在父进程中执行,此时使用waitpid()函数等待子进程结束,并输出子进程的退出状态。如果fork()函数返回负数,则说明创建子进程失败,程序返回错误。


A Student on the way to full stack of Web3.