我有一个关于exec()和fork()系统调用的问题。 我想要完成的事情:一个有3" main"进程,其中一个执行fork()N次(用户选择),每个子进程发送一个消息到其他2个进程,以便同步和做一些东西。
所以: main.c:创建queue,sem和其他ipc东西。然后fork(2次)和exec(p1)/(p2)。如果一切正常,它会在用户选择时开始分叉N次。
p1.c:附加到由main创建的ipc,等待来自" main.c"
的孩子之一的消息p2.c:附加到ipc ...等待来自" main.c"的一个孩子的消息。或表格" p2.c"
我现在正在做什么:我写了3个C文件,每个文件都有一个主要功能,"第一个主要"保留所有IPC结构,然后fork和execute and execve()以启动另外2个程序。
一切似乎都没问题,第一个正确运行和分叉,execve()运行其他2个程序,这些程序可以附加到第一个程序创建的ipc结构。很棒,但我有3个程序,3个主要,当然我不能只构建一个可执行文件。
所以我的问题:如何在没有main的情况下加载(如果可能的话)带有syscall exec的程序? 如果不可能,我应该如何编写程序的结构?
我希望很清楚,如果需要我可以编写代码,但现在有几行......
谢谢!
答案 0 :(得分:2)
用main_p1和main_p2替换main,只需调用它们而不是调用exec。
答案 1 :(得分:0)
exec*
用另一个新程序替换当前过程映像。因此,如果用C语言编写,那些其他程序必须有main
。
但是,您可以fork
当前流程而无需调用exec*
。所以你可以链接所有三个"程序"分成一个二进制文件,并在分叉后简单地调用到其他二进制文件中。