2014-12-03 244 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 +高管,这是不可避免的。只要小心,并准备你的线程像叉子这样的“坏”事件。如果这是问题,您也可以关闭所有不必要的文件描述符,这些描述符位于主应用程序运行的特殊单线程可信执行帮助程序中。