2014-12-03 229 views
1

是否可以通過創建線程來執行shell命令,即不使用popen/system或任何fork-exec變體?爲什麼或者爲什麼不?使用線程執行shell命令C++

爲了提供更多的上下文,我正在運行一個多線程程序,其中一個線程需要執行一個shell腳本。它目前使用popen()來完成它。但是,由於在多線程程序中分叉被認爲是不好的做法,是否有可能通過產生線程來實現同樣的目的?

+0

我在網上看不到任何例子。你能否提供一個例子來說明如何使用C++中的線程來執行shell命令? – user1715122 2014-12-03 08:10:21

+0

我不明白。如果我想執行「ls」命令,我可以在C++中執行一個系統(「ls」)。我如何使用std線程來做同樣的事情? – user1715122 2014-12-03 20:55:58

+0

爲了提供更多的上下文,我正在運行一個多線程程序,其中一個線程必須執行一些shell腳本。目前,我做了一個popen()來執行該shell腳本。這是不好的,因爲我不想分叉多線程程序。所以,我想知道如何在不使用fork的情況下執行該shell腳本,也就是說我可以產生另一個線程並執行該shell腳本? – user1715122 2014-12-03 22:45:30

回答

1

下面是關於多線程&叉+ EXEC潛在問題的一個有用的總結:http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them

看來,如果要執行其他程序,甚至shell腳本,你必須使用fork +高管,這是不可避免的。只要小心,並準備你的線程像叉子這樣的「壞」事件。如果這是問題,您也可以關閉所有不必要的文件描述符,這些描述符位於主應用程序運行的特殊單線程可信執行幫助程序中。