在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