首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌入式Linux子进程创建问题

嵌入式Linux子进程创建问题
EN

Stack Overflow用户
提问于 2010-02-11 12:45:32
回答 4查看 361关注 0票数 3

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

Saurabh Shah

EN

回答 4

Stack Overflow用户

发布于 2010-02-11 12:48:34

除非你有一些奇怪的、坏掉的CPU架构或者libc,否则它应该在fork()中使用写时复制,所以你应该在写完exec()之后就可以了。

票数 1
EN

Stack Overflow用户

发布于 2010-02-11 13:33:19

如果您使用的是system(),那么它将需要执行外壳来解析和执行您的命令,并且外壳可能会很大。如果您可以自己将字符串划分为命令和参数,那么可以直接调用fork()execve(),这样就不需要加载外壳了。

票数 1
EN

Stack Overflow用户

发布于 2010-02-16 11:15:16

如果您的嵌入式系统偶然安装了glib,您可以尝试使用它们的系统调用等效项。

请参阅:http://library.gnome.org/devel/glib/2.22/glib-Spawning-Processes.html

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

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

如果您能够收集到这些附加信息,可能会帮助其他人帮助您进行调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2242327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档