我想知道是否有任何好的方法在Linux环境中使用C语言执行外部命令而不使用system(),popen(),fork(),exec()?
我无法使用这些功能的原因是我的主应用程序耗尽了嵌入式主板中的大部分系统资源(即内存)。如果我做一个分支,董事会将无法创建我的主应用程序的副本。从我在书中读到,system()和popen()实际上都在下面使用fork(),所以我也不能使用它们。
我目前唯一的想法是在运行主应用程序之前创建一个进程并使用IPC(管道或套接字)让新进程知道它需要使用system()或popen()运行哪些外部命令并返回完成后,结果会回到我的应用程序中。
答案 0 :(得分:8)
你不能这样做。 Linux通过顺序调用fork()
和exec()
来创建新流程。没有其他的创建过程的方法。
但fork()
本身效率很高。它使用Copy-on-Write进行子进程,因此fork()
在真正需要之前不会复制内存。因此,如果您在exec()
之后立即致电fork()
,您的系统将不会消耗太多内存。
UPD。我骗你说过程创建。实际上,clone()
内部使用了fork()
次调用。此调用提供了对进程创建的更多控制,但使用起来可能很复杂。请阅读man 2 fork
和man 2 clone
了解详情。