簡體   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