要在C++中运行系统命令,可以直接使用std::system函数:
std::system("make -j");
该函数会等待 make-j 执行完。要想非阻塞,可以用bash的&功能,该符号会将任务切换到背后执行,并快速返回,这样C++的程序可以立即往下继续运行:
std::system("make -j &");
上面技巧对大多数命令都够用。但有一种情况,如果我们需要在一条命令行里执行多条命令(一般用;或者&&隔开),这时候&无法很好地实现我们的意图。一种方法是把这些命令包装在同一个命令里(比如使用.sh脚本文件)。还有一种方法是另外起一个线程:
void noblock_system(const std::string& cmd) {
std::thread thread{[cmd]() {
std::system(cmd.c_str());
}};
thread.detach();
}
还有一种实现方法是使用at,指定程序在多长时间之后执行。
Q. E. D.