在 pthread 中执行 运行 shell 命令的最佳优化方法是什么?

What is a good and optimized way to run shell command in a pthread?

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

Whosebug 社区有什么建议?

  1. 我应该在 pthread 中使用 system() 吗?

  2. 或者我自己应该在 pthread 中 fork 和 exec 吗?但是既然 pthread 是一个线程,在 pthread 线程中做一个 fork() 和 exec() 是否可取?

  3. 或者比上面的方法更好的方法是什么?

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

仅当 system 由于某种原因(即您想要将子进程的 stdinstdout 重定向到您的父进程,或者您想要压缩内存中的文件以便在不写入新文件的情况下通过网络发送它)。

  1. 你不应该为此使用 system,但不是因为它很贵。 (对于任何值得压缩的文件,调用后台 gzip 压缩的 any 技术的开销相对于压缩本身的成本可以忽略不计。)你不应该这样做的原因t use system 是,system 调用 shell,这意味着您必须担心引用参数。如果您改用 forkexecvp,则不必担心引用任何内容。

  2. 与线程混合使用 forkwait 相关的问题是真实的,但它们是易于处理的。如果您的 OS 有 posix_spawn,它将为您解决其中的一些问题。我通常不推荐 posix_spawn,因为使用它的代码通常比使用 fork 的代码更难维护,但对于这个应用程序来说,它应该没问题。我无法将 forkwait 与线程混合到此答案框中的综合指南。

  3. 您应该考虑的替代方法是使用 zlib 压缩等待 gzip 进程的线程中的数据。这避免了将 forkwait 与线程混合使用的问题,但它为您的程序添加了库依赖性,这可能不如依赖外部 gzip 可执行文件那么方便。