微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C / Linux下执行外部命令而不使用系统,popen,fork,exec?

我想知道是否有任何好的方法来使用C语言而不使用system(),popen(),fork(),exec()在Linux环境中执行外部命令?

我不能使用这些function的原因是我的主应用程序已经用完了我embedded式板中的大部分系统资源(即内存)。 如果我做了一个分支,董事会将无法创build我的主要应用程序的副本。 从我读的书中,系统()和popen()实际上使用fork()在下面,所以我也不能使用它们。

我现在唯一的想法是创build一个进程,然后运行我的主应用程序,并使用IPC(pipe道或套接字)让新进程知道使用system()或popen()运行需要的外部命令并将结果返回到我的应用程序,当它完成。

C Unixpipe道示例

关于在我的虚拟shell中使用fork()和subprocess的后台进程

Linux:当退出父进程退出分叉subprocess

fork()如何返回subprocess

使用PHP在Windows中进行应用程序线程化

谁在fork()之后首先执行:parent还是child?

问题与fork()

linux fork:防止文件描述符inheritance

subprocess在父进程之后启动

更高效地使用fork()和copy-on-write内存共享

你不可以做这个。 Linux通过顺序调用fork()和exec()来创建新进程。 没有其他方式的过程创造存在。

但是fork()本身非常高效。 它使用copy-on-Write进行子进程,因此fork()不会复制内存,直到真正需要为止。 所以,如果你在fork()之后立即调用exec() ,你的系统不会吃太多的内存。

UPD。 我对你说过程创作说谎。 实际上,有fork()内部使用的clone()调用。 这个调用提供了对进程创建的更多控制,但使用起来可能很复杂。 阅读man 2 fork和man 2 clone以获取更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐