在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()
函数返回负数,则说明创建子进程失败,程序返回错误。
Comments NOTHING