我需要重复地重新启动一个进程(本身)。想知道有没有什么我可以做的来避免全员执行。初始化和未初始化的数据段初始化发生在哪里?它是发生在内核空间中,还是在libc中,还是在装载器中?我可以做些什么来利用这样一个事实,即它是我每次执行的相同的二进制文件(与运行的二进制文件相同)?
发布于 2013-09-20 11:43:47
我不知道这是不是你想要的--“重复地重新启动”不太清楚--但是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每个孩子都有一个干净的分段,而不是一个或两个变量,在这些变量之上他们无论如何都不需要。我看不到任何可以避免分支的方法,显然你需要某种机制来与它应该复制的“主”副本进行通信。
https://stackoverflow.com/questions/18908100
复制相似问题