0

我需要反复(自行)重新启动一个进程。想知道我是否可以做些什么来避免完全执行。初始化和未初始化的数据段初始化发生在哪里?它发生在内核空间或libc或加载程序中吗?我能做些什么来利用它与我每次执行的二进制文件(与运行的二进制文件)相同的事实吗?

4

1 回答 1

0

我不知道这是否是您想要的-“自行反复重新启动”尚不清楚-但exec很容易避免。

由于您已经在程序映像中,您想要重新启动您只需要fork新副本。您可以拥有一个主副本,其一项职责是分叉子代并让子代运行构成真正功能的实际程序代码。就像是:

while ((! done)
{
    //wait on signal, fifo, socket, whatever

    if (somethingSaysWeAreDone)
        exit(0);

    if (fork == 0)
        break;
}

//children execute the rest of the program

每个孩子都有一个干净的片段,除了他们永远不需要的一两个变量之外。我看不出有什么办法可以避免分叉,显然你需要某种机制来与它应该复制的“主”副本通信。

于 2013-09-20T03:43:47.253 回答