优化流程重启

时间:2013-09-20 02:52:58

标签: c linux performance kernel

我需要重复重启一个过程(单独)。想知道我能做些什么来避免一个完整的高管。初始化和未初始化数据段初始化发生在哪里?它是在内核空间,libc还是在loader中发生的?有什么我可以做的,以利用每次我都在执行的二进制文件(正在运行的二进制文件)的事实吗?

1 个答案:

答案 0 :(得分: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

每个孩子都有一个清晰的片段,而不是一个或两个变量,无论如何他们根本不需要。我没有看到任何方法可以避免使用fork,显然你需要某种机制来与它应该重现的“master”副本进行通信。