【问题标题】:C: exec binary without main with exec*() syscallC:不带 main 的 exec 二进制文件,带有 exec*() 系统调用
【发布时间】:2016-04-09 03:27:09
【问题描述】:

我有一个关于 exec() 和 fork() 系统调用的问题。 我要完成的工作:一个小程序,其中有 3 个“主”进程,其中一个执行 fork() N 次(用户选择),每个孩子都向其他 2 个进程发送消息以同步和做一些事情。

所以: main.c:创建队列、sem 和其他 ipc 内容。然后 fork(2 次)和 exec(p1)/(p2)。如果一切正常,它会根据用户的选择开始分叉 N 次。

p1.c:附加到main创建的ipc,等待来自“main.c”子节点之一的消息

p2.c: attach to ipc...等待来自“main.c”的一个子节点或表单“p2.c”的消息

我现在在做什么:我写了 3 个 C 文件,每个文件都有一个 main 函数,“第一个 main”保留所有 IPC 结构,然后 fork 并执行和 execve() 以启动其他 2 个程序.

一切似乎都很好,第一个运行并正确分叉,execve() 运行其他 2 个程序,这些可以附加到第一个程序创建的 ipc 结构。太好了,但是我有 3 个程序,3 个主程序,当然我不能只构建一个可执行文件。

所以我的问题是:如何在没有主程序的情况下使用 syscall exec 加载(如果可能)程序? 如果不可能,我应该如何编写程序的结构?

我希望清楚,如果需要我可以编写代码,但现在有几行..

谢谢!!

【问题讨论】:

    标签: c exec fork


    【解决方案1】:

    将 main 替换为 main_p1 和 main_p2 并简单地调用它们而不是调用 exec。

    【讨论】:

      【解决方案2】:

      exec* 用另一个新程序替换当前过程映像。因此,如果用 C 语言编写,那些其他程序必须有一个 main

      但是,您可以 fork 您当前的进程而无需调用 exec*。因此,您可以将所有三个“程序”链接到一个二进制文件中,并在分叉后简单地调用到其他的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 1970-01-01
        相关资源
        最近更新 更多