1

我想在 C++ 的(非主)线程(pthread)中使用方法 system()。例如,

system("/path/to/some/script.sh");

这是允许的吗?如果是这样,它是否安全,我应该采取什么预防措施?

我问的原因是我从代码审查员那里得到了以下评论:

“规则是 system() 只能从单线程进程中调用。我认为您需要将新代码移动到单独的应用程序中。”

评论的第一句话有效吗?

4

2 回答 2

5

在 GNU/Linux 实现中system,它会在命令执行期间修改进程信号掩码。在多线程程序中,我们会遇到令人讨厌的意外,例如,如果另一个线程fork同时存在。

于 2013-01-18T19:29:32.077 回答
0

出于各种不同的原因,我不会这样做,信号掩码的问题就是其中之一。

一般来说,fork线程是一个棘手的组合,需要小心处理。现有的库函数可能没有考虑到多线程程序。

于 2013-01-18T19:34:45.173 回答