什么是在pthread中运行shell命令的优秀和优化方法?

问题描述 投票:-1回答:2

基本上,我想使用gzip在pthread线程中压缩文件。弹出的第一个解决方案就是调用system()。

stackoverflow社区建议什么?

  1. 我应该在pthread中使用system()吗?
  2. 或者我自己只是在pthread中分叉和执行?但是由于pthread是一个线程,建议在pthread线程中执行fork()和exec()吗?
  3. 或者比上面更好的方法是什么?
c++ pthreads posix freebsd
2个回答
2
投票
  1. 你不应该使用system,但不是因为它很贵。 (对于任何值得压缩的文件,调用背景gzip压缩的任何技术的开销相对于执行压缩本身的成本可以忽略不计。)你不应该使用system的原因是,system调用shell,这意味着你必须担心引用参数。如果你改用forkexecvp,你不必担心引用任何东西。
  2. forkwait与线程混合相关的问题是真实的,但它们易于处理。如果您的操作系统有posix_spawn,它将为您解决一些问题。我通常不建议使用posix_spawn,因为使用它的代码通常比使用fork的代码更难维护,但是对于这个应用程序它应该没问题。我无法在这个答案框中找到将forkwait与线程混合的综合指南。
  3. 您应该考虑的另一种方法是使用gzip压缩线程中等待zlib进程的数据。这避免了将forkwait与线程混合的问题,但它为您的程序添加了一个库依赖,这可能不如依赖外部gzip可执行文件那么方便。

2
投票

从另一个线程中的system调用开始,只在需要时添加复杂性。

执行fork / exec或使用zip库的额外复杂性仅值得努力,如果system由于某种原因不够(即你想将子进程的stdinstdout重定向到你的父进程,或者你想要压缩内存中的文件,用于通过网络发送而无需编写新文件)。

© www.soinside.com 2019 - 2024. All rights reserved.