在线程中使用system()

Using system() in a thread C++

本文关键字:system 线程      更新时间:2023-10-16

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

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

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

我问这个问题的原因是我从一个代码审查者那里得到了以下评论:

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

注释的第一句话有效吗?

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

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

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