从多线程程序中调用system()

Séb*_*zer 5 c linux fork system pthreads

我们正在开发一个用C ++编写的消耗内存的多线程应用程序。我们必须执行许多shellscript / linux命令(并获取返回代码)。

阅读该文章后,我们清楚地了解到在我们的上下文中使用system()是个坏主意。

一种解决方案是在程序启动之后和创建任何线程之前进行派生,但是与该进程的通信可能并不容易(套接字,管道?)。

我们考虑的第二个解决方案可能包括用python(使用xinetd?)编写的专用守护程序,该守护程序可以处理我们的系统调用。

你有没有那个问题?您是如何解决的?

注意:这是一篇更完整的文章,解释了此问题:http : //developers.sun.com/solaris/articles/subprocess/subprocess.html 他们建议使用posix_spawn,它使用vfork()而不是fork()(用于系统())。

ern*_*rn0 0

您会遇到关于如何调用外部程序的问题(fork/exec/wait,等等),但这只是问题的一部分。真正的问题是这个的调度,我认为,您不想并行运行太多的外部程序。

在不知道系统中线程组织如何进行的情况下,我可以警告您两个问题。

一个重要的问题是通过限制外部命令/脚本调用来保持低负载。您可以设置一个参数,该参数告诉您应该同时运行多少个并行外部命令。在调用外部命令之前,您应该增加一个变量来显示活动外部进程的数量;如果超过限制参数,则 sleep() 一些并重试。该过程完成后,减少该变量。(增加和减少必须互斥。)

另一个问题是,当您使用外部程序时,管理其生命周期。您应该为每个外部进程设置一个“超时”,如果它挂起一段时间,则将其终止。应该有一个“超时”线程(或者应该是主线程),它控制其他线程。