Do starts another process of the same program with the same argument and calls
f to do clean up job after the process is terminated.
Do should be called within an init function, and can be called only once in a program.
A second call to Do will be ignored.