嵌入式linux子进程创建问题

嵌入式linux子进程创建问题,linux,process,embedded,Linux,Process,Embedded,我在主板上使用linux内核2.6.30。 它有128MB的DDR2。 我的主要应用程序占用了将近80MB的系统内存。 执行所有应用程序后,只剩下25MB。 我想从我的主应用程序(使用80MB)执行系统命令。 但它并没有被执行。根据我的理解,每个子进程需要和父进程相同的内存(我从fork函数手册中得到了这个描述)。所以在我的例子中,新的子进程需要另一个80MB,而这是不可用的。因此,系统调用不起作用。 系统命令必须在发出命令后立即执行,因为主应用程序中的以下步骤需要系统命令的结果(例如需要将gr

我在主板上使用linux内核2.6.30。 它有128MB的DDR2。 我的主要应用程序占用了将近80MB的系统内存。 执行所有应用程序后,只剩下25MB。 我想从我的主应用程序(使用80MB)执行系统命令。 但它并没有被执行。根据我的理解,每个子进程需要和父进程相同的内存(我从fork函数手册中得到了这个描述)。所以在我的例子中,新的子进程需要另一个80MB,而这是不可用的。因此,系统调用不起作用。 系统命令必须在发出命令后立即执行,因为主应用程序中的以下步骤需要系统命令的结果(例如需要将grep命令的输出存储在文件中,并立即读取该文件以进行进一步处理)。因此,我不能使用IPC机制。 还有什么办法


Saurabh Shah

除非您有一些奇怪的、破损的CPU体系结构或libc,否则它应该与
fork()
一起使用Copy-on-Write,因此您应该可以在之后立即使用
exec()

如果您使用它,则需要执行shell来解析和执行您的命令,并且shell可能很大。如果您可以自己将字符串分成命令和参数,那么您可以直接调用和,这样就不需要加载shell。

如果您的嵌入式系统安装了glib,您可以尝试使用它们的系统调用等价物

见:

特别是g_spawn_sync似乎可以满足您的需要

不幸的是,system()调用通常很难从中获得正确的错误代码。我认为应该尝试使用fork()和exec()(就像其他海报建议的那样),看看它们是否会返回更详细的错误代码,以及失败的是fork()还是exec()(或其他东西)


如果您可以收集这些额外的信息,它可能会帮助其他人帮助您进行调试。

您应该先尝试一个简单的fork,看看会发生什么。我想我也遇到了类似的问题,thttpd服务器无缘无故地内存不足。strace也是一个非常有用的工具。
仔细查看您的流程,您将能够看到哪些系统调用失败,并向此处的人员提供更多信息

另外,我不明白为什么IPC不是一个解决方案。可能更复杂,但仍然是一个解决方案。
例如,您可以使用unix域套接字获取双向管道。

也许OP已关闭Overmit?