The reason is to make sure that the binary image is not held by the new invocation. I grant you this is probably paranoia on my side, but by making sure that the parent process dies and the child process calls execve I can be 100% sure that nobody is holding to the previous binary image. This is what caused the problem in the first case, so we need to make sure that cf-upgrade solves the problem.