繁体   English   中英

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

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

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

stackoverflow社区建议什么?

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

  2. 还是我自己只是在pthread中执行并执行? 但是由于pthread是线程,是否建议在pthread线程中进行fork()和exec()?

  3. 还是比上面更好的方法?

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

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

  1. 您不应该为此使用system ,但不要因为它昂贵。 (对于任何值得压缩的文件,调用后台gzip压缩的任何技术的开销相对于执行压缩本身的成本而言都是微不足道的。)不应使用system的原因是, system调用shell,这意味着您必须担心引用参数。 如果改用forkexecvp ,则不必担心引用任何内容。

  2. 与混合forkwait线程相关的问题是真实的,但它们很容易解决。 如果您的操作系统具有posix_spawn ,它将为您解决其中的一些问题。 我通常不推荐posix_spawn因为使用它的代码通常比使用fork代码更难维护,但是对于此应用程序来说应该可以。 我无法提供综合指南来混合forkwait线程进入此答案框。

  3. 您应该考虑的替代方法是使用zlib在等待gzip进程的线程中压缩数据。 这避免了混合的问题, fork ,并wait与线程,但它增加了一个库依赖于你的程序,这可能不一样便利依赖于外部gzip可执行文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM