在线程中使用system()
Using system() in a thread C++
我想在c++的(非主)线程(pthread)中使用system()方法。例如,
system("/path/to/some/script.sh");
允许吗?如果是,安全吗?我应该采取什么预防措施?
我问这个问题的原因是我从一个代码审查者那里得到了以下评论:
"规则是system()只能从单线程进程调用。我认为您需要将新代码移动到单独的应用程序中。"
注释的第一句话有效吗?
在system
的GNU/Linux实现中,它在命令执行期间修改进程信号掩码。在多线程程序中,我们会遇到令人讨厌的意外,例如,如果另一个线程fork
同时出现。
出于各种不同的原因,我不会这样做,信号掩码的问题只是其中之一。
一般来说,fork
和线程是一个棘手的组合,需要小心处理。现有的库函数可能没有考虑到多线程程序。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- Cmake找不到boost库文件,线程,date_time,iostreams,system
- 从c#中的线程调用c++函数时发生system.access.violation异常
- Play Framework - System.loadLibrary() 每个线程只有一次
- 循环system()和cout的线程会破坏堆栈
- 为什么在Mac OS X上,当在线程中使用system()时,多线程C程序会被强制分配给单个CPU