【发布时间】:2022-01-25 15:34:54
【问题描述】:
我有一个 C++ 程序,它需要根据用户输入来启动和停止给定的 Linux 程序。
我在下面的代码中简化了我当前使用的逻辑:
int pid = fork();
if (pid == -1)
{
//Handle error
}
else if (pid == 0)
{
execlp("my_program", nullptr);
exit(0);
}
else
{
//Main program stuff
if(/* user selects close "my_program"*/)
{
kill(pid, SIGTERM);
}
//Other main program stuff
}
一切正常,但我想知道在这种情况下是否有其他方法可以使用,也许更多的是现代 C++ 风格。
提前致谢。
【问题讨论】:
-
听起来像是 RAII 的经典用法?
-
看看 Boost.Process (boost.org/doc/libs/1_78_0/doc/html/boost_process/tutorial.html)。
bp::child可以启动(与 std::system 不同的是异步)一个进程,该进程可以等待、终止等。 -
是的,还有其他方法,但是如果您的程序已经正常运行,那么您希望获得什么? “[现代] C++ 风格”是达到目的的手段,而不是目的本身。
-
@m88 谢谢,我去看看
-
@JohnBollinger 我认为尝试和学习新的做事方式总是好的,即使这是你已经做过数千次的事情。