要在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.